1、全局变量
需要用volatile关键字声明。
bool volatile bFlag = false;
2、事件内核对象
通过对Event对象设置是否受信,来通知其它线程函数是否执行。
3、通过PostThreadMessage(),可以根据线程ID将消息传递给目标线程,前提是目标线程必须要有消息队列。
#include <iostream>
#include <windows.h>
#include <process.h>
using namespace std;
#define WM_TEST_MSG 0x1555
//线程函数
unsigned int __stdcall ThreadProc(void* )
{
MSG msg;
//从该线程的消息队列里取消息
while(::GetMessage(&msg, NULL, 0, 0))
{
switch(msg.message)
{
case WM_TEST_MSG:
cout<<"get"<<endl;
break;
default:
break;
}
}
return 0;
}
int main()
{
//启动线程,保存线程ID
UINT iThreadID = 0;
::_beginthreadex(NULL, 0, ThreadProc, NULL, 0, &iThreadID);
while(!getchar())
{
}
//通过线程ID向目标线程发消息
::PostThreadMessage(iThreadID, WM_TEST_MSG, 0, 0);
while(!getchar())
{
}
return 0;
}