Probleme mit Windows Sockets und Threads

Hallo. Ich hab ein Prograemmchen mit VC.NET geschrieben, das bis vor der Einfuehrung von Threads problemlos funktionierte.
Ich bekomme immer eine Nullpointer-Exception und zwar liest ein Befehl die Adresse 0x0. Keine ahnung warum.
Die Klasse sieht ungefaehr so aus :
(host.h)

class host {

 static HANDLE boeserThread;

 static DWORD boeseThreadFunktion(LPVOID bla);

 static void callbackFunktion(DWORD bla, DWORD blabla, ...);

 host();
 ~host();
}

(host.cpp)

host::host()
{
 host::boeserThread = CreateThread(blablabla...);
 //Thread wird erfolgreich erzeugt
}

DWORD host::boserThreadFunktion(LPVOID bla)
{
 //Diese Funktion wird erfolgreich aufgerufen, erzeugt einen OVERLAPPED Socket
 SOCKET meinSocket = WSASocket(AFINET, SOCK\_DGRAM, WSA\_FLAG\_OVERLAPPED);
 //Jetzt wird auf dem Socket ein packet gesendet, OVERLAPPED
 WSASendTo(..., ..., ..., &host::callbackFunktion);
 //Diese Funktion liefert einen SOCKET\_ERROR, was nach Dokumentation auch OK ist
 //Nach einem WSAGetLastError() kommt als Fehlermeldung ein WSA\_IO\_PENDING zurueck, was bedeutet, dass der letzte Befehl ausgefuehrt wird und dann die Funktion "callbackFunktion" aufgerufen wird (angegeben in WSASendTo). Allerdings kann die "callbackFunktion" nicht aufgerufen werden, wenn der Thread nicht angehalten wird, also rufe ich ein :
 SleepEx(200, true);
 //auf, was bedeutet der Thread soll warten. 200 millisekunden, oder bis eine callbackFunktion aufgerufen wird ("callbackFunktion")
 //Das Programm spring jetzt in die "callbackFunktion", arbeitet die Befehle ab, und stuerzt dann mit einer "Lesen von Adresse 0x0"-Fehlermeldung ab. Angeblich nach "SleepEx(200, true);". Der Assemblercode bring auch nix interessantes zutage...
}

host::callbackFunktion(...)
{
 cout 

Ohne Threads oder mit einem Sleep(200); geht alles problemlos, alldings wird dann die "callbackFunktion" auch nich aufgerufen.

Hilfe sehr wilkommen! :smile:

KIM

Was ich vergessen habe :
der böse Thread läuft ewig in einer while()-Schleife

DWORD host::boserThreadFunktion(LPVOID bla)
{
 //Diese Funktion wird erfolgreich aufgerufen, erzeugt einen OVERLAPPED Socket
 SOCKET meinSocket = WSASocket(AFINET, SOCK\_DGRAM, WSA\_FLAG\_OVERLAPPED);
 while(!aufhoeren) {
 //Jetzt wird auf dem Socket ein packet gesendet, OVERLAPPED
 WSASendTo(..., ..., ..., &host::callbackFunktion);
 //Diese Funktion liefert einen SOCKET\_ERROR, was nach Dokumentation auch OK ist
 //Nach einem WSAGetLastError() kommt als Fehlermeldung ein WSA\_IO\_PENDING zurueck, was bedeutet, dass der letzte Befehl ausgefuehrt wird und dann die Funktion "callbackFunktion" aufgerufen wird (angegeben in WSASendTo). Allerdings kann die "callbackFunktion" nicht aufgerufen werden, wenn der Thread nicht angehalten wird, also rufe ich ein :
 SleepEx(200, true);
 //auf, was bedeutet der Thread soll warten. 200 millisekunden, oder bis eine callbackFunktion aufgerufen wird ("callbackFunktion")
 //Das Programm spring jetzt in die "callbackFunktion", arbeitet die Befehle ab, und stuerzt dann mit einer "Lesen von Adresse 0x0"-Fehlermeldung ab. Angeblich nach "SleepEx(200, true);". Der Assemblercode bring auch nix interessantes zutage...
 }
 //Dann auch brav socket schließen usw.
 closesocket(meinSocket);
}

KIM