#define WM_MyMessage (WM_USER+100) //自定义消息号
UINT funcw(LPVOID pParam) //写线程
{
DWORD ID = (DWORD)pParam; //获取读线程ID
int n = 0;
for (int i=0;i<1000;i++)
{
n = n + 2;
BOOL b=PostThreadMessage(ID, WM_MyMessage,n,NULL); //将一个队列消息放入(寄送)到指定线程的消息队列里
/*
PostThreadMessage可以用于线程之间的异步通讯,不等待线程处理消息就返回
参数1:DWORD 目标线程ID
参数2:UINT消息号(消息的类型)
参数3:WPARAM 指定附加的消息特定信息
参数4: LPARAM 指定附加的消息特定信息
返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。
若想获得更多的错误信息,请调用GetLastError函数。
如果idThread不是一个有效的线程标识符或由idThread确定的线程没有消息队列,GetLastError返回ERROR_INVALID_THREAD_ID
*/
Sleep(1000);
}
return 100;
}
UINT funcr(LPVOID pParam)
{
//从消息队列里获取写线程发送过来的消息
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
switch (msg.message)
{
case WM_MyMessage: //根据消息号进行判断
int n = (int)msg.wParam;
CString str;
str.Format(_T("n=%d\r\n"),n);
::OutputDebugString(str);
break;
}
}
return 200;
}
void Cduoxiancen2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CWinThread* pp1 = AfxBeginThread(funcr, NULL); //读线程
pp1->m_nThreadID;//当前线程的 ID
CWinThread* pp = AfxBeginThread(funcw, (LPVOID)pp1->m_nThreadID);//写线程
//传递的参数是读线程的ID
//功能:写线程的变量值发生变化后,就发送消息告诉读线程
}