003
06.08.2003, 09:37 Uhr
ao
(Operator)
|
@kronos: Ich nehme mal an, dass wir hier von Win32-Threads reden.
Die Threadfunktion ist falsch deklariert, richtig ist:
C++: |
int threadfunktion (void * pParam) { /* ... */ }
|
Das pParam kannst du benutzen, um die Threadfunktion mit beliebigen Parametern zu versorgen. Der Wert, der hier rauskommen soll, muß in CreateThread reingesteckt werden, und zwar als erstes Argument hinter den Pointer auf die Threadfunktion.
Was für ein Objekt du da reinsteckst, ist Windows völlig egal, das ist ne Sache nur zwischen dem Thread-Erzeuger und der Threadfunktion selbst. Das kann ein einzelner Wert sein oder ein Zeiger auf eine Struktur, ganz wie dein Programm es braucht.
Du musst nur drauf achten, dass das Objekt gültig bleibt, solange die Threadfunktion darauf zugreift, d.h. dass der Scope des Objekts so lange nicht verlassen wird.
Lokale Daten innerhalb der Erzeuger-Funktion sind daher unsicher, wenn nicht durch eine Synchronisation zwischen Thread und Erzeuger garantiert ist, dass der Erzeuger aufgehalten wird, bis der Thread mit dem Auswerten der Parameter fertig ist.
ao |