[Lazarus] Simplest way to have a safe thread queue
Aradeonas
aradeonas at operamail.com
Wed Oct 21 12:07:48 CEST 2015
Hi, [Cross posted on forum so if you want answer there :
http://forum.lazarus.freepascal.org/index.php/topic,30097.0.html] I want
to make a simple and safe queue with multiple worker that do the jobs,
so for example I add 10 job and have 2 worker that do the job. For this
I read multi threading[1] and queue [2]wiki and some posts like this
[3]and also Lazarus multi threading samples but still cant find out how
to make a good structure that really work specially when I read [4]about
that it is not very good to do counting and micro-managing. Also I dont
know a good multi threading library in Lazarus like OmniThreadLibrary
and also couldn't find any good example.
For now I have a list of jobs and 2 workers and also a var that control
that when a thread finish start another for the next job but it not do
job very good and sometimes it will mess the list of jobs.
var i: integer; begin try MyCriticalSection.Enter; for i := 0 to
Count - 1 do begin if (StartedCount >= WorkersCount) then
//check for is there need for making new thread or not Exit;
if (not Jobs[i].Working) and (not Jobs[i].Finished) then //check the job
is already done or not StartJob(Jobs[i]); end; if
(StartedCount = 0) then Finish;//It will finish that list of jobs
finally MyCriticalSection.Leave; end;
Regards, Ara
Links:
1. http://wiki.freepascal.org/Multithreaded_Application_Tutorial
2. http://wiki.freepascal.org/Manager_Worker_Threads_System
3. http://stackoverflow.com/questions/15027726/how-to-make-a-thread-finish-its-work-before-being-freed/15033839#15033839
4. http://stackoverflow.com/questions/15622261/multi-thread-delphi
--
http://www.fastmail.com - Access all of your messages and folders
wherever you are
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20151021/68bbe3bb/attachment-0002.html>
More information about the Lazarus
mailing list