Вы можете использовать событие CustomDrawSubItem.
В приведенном ниже примере игнорируется текст и рисуется прямоугольник. К сожалению, это немного хлопот, чтобы получить прямоугольник для правой колонки, но этот подход работает:
procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
r : TRect;
i : Integer;
begin
r := Item.DisplayRect(drBounds);
for i := 0 to SubItem-1 do begin
r.Left := r.Left + ListView.Columns.Items[i].Width;
r.Right := r.Left + ListView.Columns.Items[i+1].Width;
end;
case SubItem of
1 : ListView.Canvas.Pen.Color := clRed;
else
ListView.Canvas.Pen.Color := clBlue;
end;
ListView.Canvas.Rectangle(r.Left, r.Top, r.Right, r.Bottom);
DefaultDraw := False;
end;
Поток не всегда имеет ввод / вывод. Можно было бы, чтобы один поток занимался обработкой чисел, другой обрабатывал ввод-вывод. Поток сокращения числа с вашим предложением никогда не будет отбрасывать GIL, чтобы другой поток мог обрабатывать ввод / вывод.
Чтобы обеспечить запуск каждого потока, поток по умолчанию отбросит GIL через 5 мс (Python 3), если он не сделал этого раньше из-за ожидания ввода-вывода .
Вы можете изменить этот интервал с помощью sys.setswitchinterval()
.
Threading - это простой метод параллелизма. Более эффективный метод параллелизма можно найти в asyncio
, который предлагает однопоточный параллелизм с использованием сопрограмм.