LGTeam,
deks Цитата: AlekXL, посмотрите, может навеет что:
https://code.google.com/p/omnithreadlibrary/
Цитата: В OmniThreadLibrary есть куча примеров такой работы - причем и с передачей сообщений о прогресе, и с передачей в фоновый поток начальных данных, и с загрузкой результата фоновой обработки, и с параллельным разбиением задачи на несколько потоков для одновременной обработки..
OTL -- зло, я считаю. Во-первых, без нужды завязанное на мессаджи, непереносимое. Скверно, неинтуитивно спроектированное.
Я уже
писал о его грехах. И примеры OTL столь же плохие. В OTL много труда вбухано, но она ужасна, как атомная война.
Сейчас этот пшек пытается монетизировать свой опус за счет книги и платных вебинаров. Знаете, если фреймворк настолько неинтуитивен и сложен, что нужна книга, чтобы понять , как все это использовать,
то может нафиг его? Зачем связываться с таким безблагодатным поделием?
Мне пришлось пилить собственную многопоточку(и очередь тасков не через windows msg queue, а через Collections.TPriorityQueue, нативно) .
Вот пример ее использования, бутстрап
Код: fTaskMan:=phGetTaskManager();
fcBuildCtx:=fTaskMan.Prepare( phClassContext().Build,{$IFDEF DEBUG}'buildClassCtx'{$ENDIF} ).Schedule();
tcInitSettings:= fTaskMan.Prepare(TphSimpleFnMethodTaskImp<IphSettings>.Create(getSettings)
{$IFDEF DEBUG},'getSettings'{$ENDIF}).Schedule(fcBuildCtx);
fTcGetLocalizer:=TphTaskControlHelper.getGenericTaskControl<IphValuePairs>(GetLocaLizer{$IFDEF DEBUG},'getLocalizer'{$ENDIF}).
Schedule(tcInitSettings);
tcBootstrapModules :=fTaskMan.Prepare(procedure()begin phBqModule.Bootstrap();end
{$IFDEF DEBUG},'phBqModule.Bootstrap'{$ENDIF} ).Schedule(tcInitSettings);
fcInitProtocol:=fTaskMan.Prepare(self.InitInternalProtocols {$IFDEF DEBUG}, 'initInternalProtocols'{$ENDIF}).RequireComInitialzation(0).Schedule(tcInitSettings);
fTcLoadCached:=fTaskMan.Prepare(LoadModuleList{$IFDEF DEBUG},'LoadModuleList'{$ENDIF}).Schedule(fTcGetLocalizer);
fTcScanModules:=fTaskMan.Prepare(TModuleScanner.Create(self) as IphModuleScanner
{$IFDEF DEBUG},'TModuleScanner'{$ENDIF}).RequireFinished(tcBootstrapBqModules). Schedule(tcInitSettings,ScanDone);
fTcInitVerseList:=fTaskMan.Prepare(
self.initVerseListEngine{$IFDEF DEBUG},'initVerseListEngine'{$ENDIF}).Schedule(tcInitSettings);
TThread.Yield();