简单实现了线程通讯,记录下,直接上代码。
发送线程:
#define MY_SHELLMENU_MSG WM_USER+200
int iCmd=0,iMinID=0;
PostThreadMessage(nThreadID, MY_SHELLMENU_MSG, (WPARAM)iCmd, (LPARAM)iMinID);
1.上面的线程id需要自己获取,你要发给哪个线程就是了。
2.消息是自定义的
3.icmd和iMinID可以是任意类型
接收线程:
while (true)
{
if (PeekMessage(&msg, NULL, MY_SHELLMENU_MSG, MY_SHELLMENU_MSG,PM_REMOVE)) //get msg from message queue
{
if(msg.message == MY_SHELLMENU_MSG)
{
//dosomething
}
}
Sleep(50);
}
接收这里PM_REMOVE代表取完这个消息,就从队列移除掉了。可以了解下PeekMessage和GetMessage的区别,PeekMessage更像是一个观察者,PM_NOREMOVE的时候,这里自行选择。