Самым безопасным способом синхронизации потоков используют некоторые из объектов ядра. В вашем случае вы можете создать "прекратить" событие с CreateEvent
и ждать его внутри функции нить обратного вызова:
#include <Windows.h>
#include <iostream>
using std::cout;
using std::cerr;
using std::endl;
DWORD WINAPI Callback(LPVOID lpVoid)
{
HANDLE hTerminateEvent = *(reinterpret_cast<HANDLE*>(lpVoid));
bool terminate = false;
while(!terminate)
{
DWORD retVal = WaitForSingleObject(hTerminateEvent, 0);
switch(retVal)
{
case WAIT_OBJECT_0:
cout << "Terminate Event signalled" << endl;
terminate = true;
break;
case WAIT_TIMEOUT:
cout << "Keep running..." << endl;
Sleep(1000);
break;
case WAIT_FAILED:
cerr << "WaitForSingleObject() failed" << endl;
terminate = true;
break;
}
}
return 0;
}
int main()
{
DWORD threadID = 0;
HANDLE hTerminateEvent = CreateEvent(0, FALSE, FALSE, 0);
HANDLE hThread = CreateThread(0, 0, Callback, &hTerminateEvent, 0, &threadID);
// allow some time to thread to live
Sleep(20000);
// set terminate event
if(!SetEvent(hTerminateEvent))
{
cerr << "SetEvent() failed" << endl;
return 1;
}
// wait for thread to terminate
DWORD retVal = WaitForSingleObject(hThread, INFINITE);
switch(retVal)
{
case WAIT_OBJECT_0:
cout << "Thread terminated" << endl;
break;
case WAIT_FAILED:
cerr << "WaitForSingleObject() failed" << endl;
break;
}
CloseHandle(hThread);
CloseHandle(hTerminateEvent);
return 0;
}
Выход:
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Keep running...
Terminate Event signalled
Thread terminated
Вы хотите остановить его, но вам нужно его остановить? Есть ли соединение с базой данных или внепроцессный сервер, который вам нужно закрыть? Если нет, самый простой способ остановить поток при выходе программы - выйти из программы - все ваши потоки будут остановлены. –