windows多线程

头文件

class ConvertDataThread  
{
public:
	static void RefreshThread();
	static void ThreadClose();
	static void SetThreadHandle(HANDLE handle){m_handle = handle;}
	static void ThreadPause();
	static void ThreadContinue();
	static void SetThreadIsRunning(){m_bRunning = true;}
	static bool IsRunning(){return m_bRunning;}
private:
	static HANDLE m_handle;
	static bool m_bRunning;
private:
	ConvertDataThread(){}
	~ConvertDataThread(){}
};

cpp文件


HANDLE ConvertDataThread::m_handle = NULL;
bool ConvertDataThread::m_bRunning = false;

void ConvertDataThread::ThreadPause() 
{
	SuspendThread(m_handle);
}

void ConvertDataThread::ThreadContinue() 
{
	ResumeThread(m_handle);
}

void ConvertDataThread::ThreadClose()
{
	if(m_handle)
	{
		TerminateThread(m_handle, 1);
		m_handle = NULL;
		m_bRunning = false;
	}
}

DWORD WINAPI ConvertCBPOITimerSourceData(LPVOID pData)
{
	ConvertDataThread::SetThreadIsRunning();
	ConvertCBPOITimer::DoAll();
	::Sleep(1000);//如果时间太短,下面的消息会丢失,所以sleep一会
	::SendMessage(::AfxGetMainWnd()->GetSafeHwnd(), WM_CLOSE, 0, 0);//退出程序
	return 0;
}

void ConvertDataThread::RefreshThread()
{
	ThreadClose();	
	m_handle = ::CreateThread(NULL, 0, ConvertCBPOITimerSourceData, NULL, 0, NULL);
	m_bRunning = true;
}

猜你喜欢

转载自blog.csdn.net/weixin_43172531/article/details/103766906