006
23.06.2003, 20:54 Uhr
virtual
Sexiest Bit alive (Operator)
|
Das hauptproblem bei TerminateThread ist, daß nicht alle Resourcen korrekt abgeräumt werden. Einerseits werden also Memoryleaks auftreten (fallen erst bei längerem Laufen des Programms auf), oder aber Semaphore werden nicht freigegeben, was im Zweifel im Deadlock endet.
Ich komme eigentlich aus der UNIX Ecke, deshalb sind meine Aussagen bzgl. WIndows API Grundsätzlich mit Vorsicht zu geniesen.
Eine saubere Synchronisations könnte zB so aussehen:
Mittels CreateEvent Erstellst Du eine Event-Semaphore (oder wie das die Jungs von MS auch immer nennen mögen), möglichst in not-signaled State. Mal in der MSDN nachblättern...
Dann Startest Du Deinen Workerthread. Der Workersthread sollte in Regelmäßigen Abständen prüfen, ob das Event-Semaphore im Signaled state ist und - wenn dem so ist - sich beenden. Ich kann mir vorstellen, daß man das mit WaitForSingleObject hinbekommen kann - Mal in der MSDN nachblättern, insbes. der letzte Parameter, der angibt, wie lange man warten soll.
Im Mainthread setzt Du, wenn Du dich beendest, Die Event-Semaphore auf Signaled State. (SignalEvent oder SetEvent, oder wie auch immer), schau mal in der ... ach - du weisst schon 
Danach machst Du ein WaitForSingleObject auf das Threadhandle des Workerthreads, um zu warten, bis der Thread sich gejoint hat. Mag sein,. daß das Windows API da auch elegantere Möglichkeiten bietet, schau mal in der .... -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 23.06.2003 um 20:55 Uhr von virtual editiert. |