diff --git a/rtl/inc/thread.inc b/rtl/inc/thread.inc index 12e2c26359..7868216971 100644 --- a/rtl/inc/thread.inc +++ b/rtl/inc/thread.inc @@ -248,6 +248,12 @@ begin currenttm.rtleventsetEvent(state); end; +procedure RTLeventStartWait(state:pRTLEvent); + +begin + currenttm.rtleventStartWait(state); +end; + procedure RTLeventWaitFor(state:pRTLEvent); begin @@ -409,6 +415,12 @@ begin NoThreadError; end; +procedure NORTLeventStartWait(state:pRTLEvent); + +begin + NoThreadError; +end; + procedure NORTLeventWaitFor(state:pRTLEvent); begin @@ -467,6 +479,7 @@ begin rtlEventCreate :=@NortlEventCreate; rtleventdestroy :=@Nortleventdestroy; rtleventSetEvent :=@NortleventSetEvent; + rtleventStartWait :=@NortleventStartWait; rtleventWaitFor :=@NortleventWaitFor; rtleventsync :=@Nortleventsync; rtlchksyncunix :=@nortlchksyncunix; @@ -477,7 +490,10 @@ end; { $Log$ - Revision 1.16 2004-12-27 15:28:40 marco + Revision 1.17 2004-12-28 14:20:03 marco + * tthread patch from neli + + Revision 1.16 2004/12/27 15:28:40 marco * checksynchronize now in interface win32 uses the default impl. unix uses systhrds, rest empty implementation. diff --git a/rtl/inc/threadh.inc b/rtl/inc/threadh.inc index 3a7d17afe1..1c70f8708a 100644 --- a/rtl/inc/threadh.inc +++ b/rtl/inc/threadh.inc @@ -78,7 +78,8 @@ type RTLEventCreate : TRTLCreateEventHandler; RTLEventDestroy : TRTLEventHandler; RTLEventSetEvent : TRTLEventHandler; - RTLeventWaitFOr : TRTLEventHandler; + RTLEventStartWait : TRTLEventHandler; + RTLEventWaitFor : TRTLEventHandler; RTLEventSync : TRTLEventSyncHandler; RTLChkSyncUnix : TRTLCheckSyncUnixHandler; end; @@ -158,13 +159,17 @@ function basiceventWaitFor(Timeout : Cardinal;state:peventstate) : longint; function RTLEventCreate :PRTLEvent; procedure RTLeventdestroy(state:pRTLEvent); procedure RTLeventSetEvent(state:pRTLEvent); +procedure RTLeventStartWait(state:pRTLEvent); procedure RTLeventWaitFor(state:pRTLEvent); procedure RTLeventsync(m:trtlmethod;p:tprocedure); procedure RTLchecksynchronize; { $Log$ - Revision 1.23 2004-12-27 15:28:40 marco + Revision 1.24 2004-12-28 14:20:03 marco + * tthread patch from neli + + Revision 1.23 2004/12/27 15:28:40 marco * checksynchronize now in interface win32 uses the default impl. unix uses systhrds, rest empty implementation. diff --git a/rtl/unix/cthreads.pp b/rtl/unix/cthreads.pp index 144a7869c9..17ebda0b72 100644 --- a/rtl/unix/cthreads.pp +++ b/rtl/unix/cthreads.pp @@ -528,12 +528,19 @@ begin pthread_mutex_unlock(@p^.mutex); end; -procedure intRTLEventWaitFor(AEvent: PRTLEvent); +procedure intRTLEventStartWait(AEvent: PRTLEvent); var p:pintrtlevent; begin p:=pintrtlevent(aevent); pthread_mutex_lock(@p^.mutex); +end; + +procedure intRTLEventWaitFor(AEvent: PRTLEvent); +var p:pintrtlevent; + +begin + p:=pintrtlevent(aevent); pthread_cond_wait(@p^.condvar, @p^.mutex); pthread_mutex_unlock(@p^.mutex); end; @@ -573,6 +580,7 @@ begin EnterCriticalSection(SynchronizeCritSect); SynchronizeMethod := tthreadmethod(thrdmethd); SynchronizeException := nil; + RtlEventStartWait(ExecuteEvent); SynchronizeMethodProc; // wait infinitely RtlEventWaitFor(ExecuteEvent); @@ -658,6 +666,7 @@ begin rtlEventCreate :=@intrtlEventCreate; rtlEventDestroy :=@intrtlEventDestroy; rtlEventSetEvent :=@intrtlEventSetEvent; + rtlEventStartWait :=@intrtlEventStartWait; rtleventWaitFor :=@intrtleventWaitFor; rtleventsync :=trtleventsynchandler(@intrtleventsync); rtlchksyncunix :=@checksynchronize; @@ -673,7 +682,10 @@ finalization end. { $Log$ - Revision 1.18 2004-12-27 15:28:40 marco + Revision 1.19 2004-12-28 14:20:03 marco + * tthread patch from neli + + Revision 1.18 2004/12/27 15:28:40 marco * checksynchronize now in interface win32 uses the default impl. unix uses systhrds, rest empty implementation. diff --git a/rtl/win32/systhrds.pp b/rtl/win32/systhrds.pp index 89f6decafa..10907ad8a7 100644 --- a/rtl/win32/systhrds.pp +++ b/rtl/win32/systhrds.pp @@ -437,6 +437,11 @@ end; CONST INFINITE=-1; +procedure intRTLEventStartWait(AEvent: PRTLEvent); +begin + // nothing to do, win32 events stay signalled after being set +end; + procedure intRTLEventWaitFor(AEvent: PRTLEvent); begin WaitForSingleObject(THANDLE(AEvent), INFINITE); @@ -479,10 +484,11 @@ begin BasicEventResetEvent :=@intBasicEventResetEvent; BasicEventSetEvent :=@intBasicEventSetEvent; BasiceventWaitFor :=@intBasiceventWaitFor; - RTLEventCreate :=@intRTLEventCreate; - RTLEventDestroy :=@intRTLEventDestroy; - RTLEventSetEvent :=@intRTLEventSetEvent; - RTLeventWaitFor :=@intRTLeventWaitFor; + RTLEventCreate :=@intRTLEventCreate; + RTLEventDestroy :=@intRTLEventDestroy; + RTLEventSetEvent :=@intRTLEventSetEvent; + RTLEventStartWait :=@intRTLEventStartWait; + RTLEventWaitFor :=@intRTLEventWaitFor; end; SetThreadManager(WinThreadManager); InitHeapMutexes; @@ -494,7 +500,10 @@ end. { $Log$ - Revision 1.13 2004-12-26 13:46:45 peter + Revision 1.14 2004-12-28 14:20:03 marco + * tthread patch from neli + + Revision 1.13 2004/12/26 13:46:45 peter * tthread uses systhrds Revision 1.12 2004/12/22 21:29:24 marco