大家在多线程编程的时候,需要在程序退出之前,退出一些特定的后台线程。下面的代码可以完美解决此类问题。
#include <windows.h>
#include "stdio.h"
HANDLE hCheckThread, hCheckEvent;
unsigned long __stdcall HeatBeatUpdateThread(void * argList)
{
int end =0, i = 0;
end = GetTickCount();
while (WaitForSingleObject(hCheckEvent, 1000000) != WAIT_OBJECT_0)
{
printf("count:%d, duration:%d/n", i, GetTickCount() - end);
i++;
end = GetTickCount();
}
printf("exit thread");
return 0;
}
unsigned long BackgroundThreadCreate()
{
unsigned long ThreadId = 0;
// Create a manual-reset nonsignaled unnamed event
hCheckEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
hCheckThread = CreateThread(NULL, 0, HeatBeatUpdateThread, NULL, 0, &ThreadId);
return 0;
}
void main()
{
int begin, end;
BackgroundThreadCreate();
Sleep(300);
// Killed the check thread
SetEvent(hCheckEvent); // signal thread to end
begin = GetTickCount();
// Wait max. 10 seconds for the firmware thread to terminate - if not, force a terminate
if(WAIT_OBJECT_0 != WaitForSingleObject(hCheckThread,10000))
{
TerminateThread(hCheckThread,0);
}
end = GetTickCount() - begin;
CloseHandle(hCheckEvent);
CloseHandle(hCheckThread);
while (1)
{
Sleep(10000000);
}
}