Называется EZThreads (https://github.com/mr-highball/ezthreads)
Предварительно потестировал, в целом понравилось.
Но столкнулся с проблемой потери вызовов из очереди основного потока
В качестве тестового примера
В теле процедур (всего 15шт) исполняемых в потоках
Делаю
- Код: Выделить всё
begin
Sleep(1000) ... Sleep(15000) в каждом потоке своя задержка.
TThread.Queue(nil, Proc1); .. TThread.Queue(nil, Proc15); - соответственно для каждого потока своя процедура
end;
Код процедур Proc1 ... Proc15
- Код: Выделить всё
begin
Memo1.Lines.Add('1'); ... Memo1.Lines.Add('15');
end;
Насколько я понимаю после выполнения всех потоков в Memo1 должны быть выведены все уведомления от всех потоков. Но могут быть в разном порядке в частных случаях.
Проблема в том, что в Memo1 выводятся лишь некоторые (всего 2-3 штуки сообщения, бывают разные, иногда вообще ничего).
Такое ощущение , что они как-то теряются.
Если заменить
- Код: Выделить всё
TThread.Queue(nil, Proc1);
на
TThread.Synchronize(nil, Proc1);
Не думаю, что это связано именно с этой библиотекой.
Вопрос к тем, кто активно использует потоки и разную синхронизацию из них c основным потоком.
Встречались ли проблемы с несрабатыванием методов поставленных в очередь через TThread.Queue ?
Причем, если добавить
после
- Код: Выделить всё
TThread.Queue(nil, ProcN);
и поставить задержку
Sleep(15) - то начинает выводиться
А Sleep(5) не хватает.
Стремный какой-то вариант, может на других компах не хватит и Sleep(1000);
Кто нибудь сталкивался с подобными проблемами?