Arg, arg, arg. Ik wil een load-test programmatje maken, en daarvoor wil ik graag maximaal 3 threads tegelijk gebruiken.
Er is een mooie abstractie voor het uitvoeren van een parallelle taak: TTask.
Die taak wordt uitgevoerd door een TThreadPool. Ook mooi. Die heeft properties waarmee je kan instellen hoeveel worker threads deze mag hebben, en DAT WERKT NIET.
Waarom? Omdat één of ander helder licht bedacht heeft dat je niet minder workers mag hebben dan processors (waarom?!) en dat MinWorkers kleiner moet zijn dan (en dus niet gelijk aan) MaxWorkers. WAAROM?!!
Het is mijn ThreadPool. Als ik precies 3 workers wil dan is dat toch mijn zaak?
Delphi Code:
function TThreadPool.SetMaxWorkerThreads(Value: Integer): Boolean;
begin
Result := Value >= TThread.ProcessorCount;
if Result then
TInterlocked.Exchange(FMaxLimitWorkerThreadCount, Value);
end;
function TThreadPool.SetMinWorkerThreads(Value: Integer): Boolean;
begin
Result := (Value > -1) and (Value < FMaxLimitWorkerThreadCount);
if Result then
TInterlocked.Exchange(FMinLimitWorkerThreadCount, Value);
end;
Bookmarks