[fpc-pascal] Multi-Threading and usage of Semaphors under FPC

Graeme Geldenhuys graemeg at opensoft.homeip.net
Fri Sep 11 16:40:05 CEST 2009


Hi,

I had a previous discussion about Semaphores. Apparently my usage of
them was not very good, because they were specific to the Linux system
and Posix. Anyway, I was told it is better to use the ThreadManager.

So how do I translate code as show below to using the FPC ThreadManager?
I can see where I can set specific information for the FPC Threadmanager
-> Semaphore compared to the code below...

-----------------------
procedure TtiPool.CreatePoolSemaphore;
begin
  {$IFDEF MSWINDOWS}
  if FSemaphore <> 0 then
    CloseHandle(FSemaphore);
  FSemaphore := CreateSemaphore(nil, FMaxPoolSize, FMaxPoolSize, nil);
  {$ENDIF MSWINDOWS}

  {$IFDEF UNIX}
  sem_destroy(FSemaphore);
  if sem_init(FSemaphore, 0, FMaxPoolSize) <> 0 then
    raise Exception.Create('Failed to create the semaphore');
  {$ENDIF UNIX}
end;
-----------------------

This is what I tried, but like I said, how to I set the min and max
poolsize etc?


var
  FThreadMgr: TThreadManager;
  p: pointer;
....

  if not GetThreadManager(FThreadMgr) then
    raise Exception.Create('Failed to reach the FPC thread manager');
  p := FThreadMgr.SemaphoreInit;


See the problem? SemaphoreInit doesn't take parameters. What am I
missing here? Sorry if this all sounds dumb, but I am not well versed
when it comes the multi-threaded programming.


Regards,
  - Graeme -

-- 
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://opensoft.homeip.net/fpgui/




More information about the fpc-pascal mailing list