Aus der Thread-Funktion:
Code: Select all
PostMessage((HWND)appHandleMap.get(L"mainWindow"), WM_THREAD_DONE,
(WPARAM)&THREAD_NAME, (LPARAM)lParam/* Custom Data*/);
return 0;
Code: Select all
case WM_THREAD_DONE:
{
// ...
std::wstring* threadName = (std::wstring*)wParam;
THREAD_DATA* threadData = (THREAD_DATA*)lParam;
// Close Thread Handle in Handle Map and delete
appHandleMap.closeHandleObjectAndRemove(threadName);
// Clean up any allocated memory
delete threadData;
// etc.
}
Code: Select all
WM_DESTROYIn WM_DESTROY habe ich das Stop-Ereignis festgelegt, das vom Thread beobachtet wird, und es wird abgefangen. Aber die PostMessage(WM_THREAD_DONE) des Threads unterbricht den Fluss: Der Debugger zeigt an, dass der WM_THREAD_DONE-Handler nie erreicht wird und der Rest von WM_DESTROY danach nie fortgesetzt wird. Die Anwendung läuft weiter.
Code: Select all
case WM_DESTROY:
{
// Set Stop Event for thread
HANDLE hStopEvent = ..;
SetEvent(hStopEvent); // this works, and is successfully detected by thread
while (appHandleMap.getKeysStartingWith(L"thread").size() > 0) {
// Do nothing, give it some time to close
// We proceed when the thread is no longer in the handle Map
}
//.. etc. other Destroy code
appHandleMap.clear();
PostQuitMessage(0);
break;
}
Mobile version