Man kann TerminateThread verwenden, um einen Thread zu beenden. Allerdings ist das eine gefährliche Sache, weil z.B. auf dem Heap allokierter Speicher, CritSecs und geladene DLLs nicht freigegeben werden.
Du solltest also zuerst den Thread "sanft" beenden, z.B. indem Du ein Flag setzt, das der Thread regelmäßig prüft, und abwarten, ob er sich selbst beendet. Erst wenn das nicht klappt, solltest Du TerminateThread in Erwägung ziehen.
Das Ganze könnte etwa so aussehen:
DWORD dwThreadId;
HANDLE hThread = CreateThread( NULL, 0, ThreadProc, (void*) pParam, 0, &dwThreadId );
// ...irgendwas tun
// Jetzt soll der Thread beendet werden, Flag setzen
fStopThread = TRUE;
// Dem Thread Zeit geben, sich zu beenden.Hier: 5 Sekunden
if( WAIT_OBJECT_0 != WaitForSingleObject( hThread, 5000 ) ) {
// Thread hat nicht terminiert, dann auf die harte Tour
TerminateThread( hThread, 0 );
}
CloseHandle( hThread );
[/CODE]