void MDDialog::OnButton4() //界面的一个普通按钮触发事件
{
int count = 0;
while (count < 5)
{
if(!PostThreadMessage(m_dwPrintId,0,0,0))//post thread msg向线程函数发出消息
{
AfxMessageBox("post message failed,errno:%d\n",::GetLastError());
}else
{
// AfxMessageBox("send success");//post成功则执行此处
}
// ::Sleep(500);
count++;
}
}
_----------------------------------------------------------------------------------问题是,while循环5次,if判断后 每次都是执行到发送成功的,但是实际情况是线程响应函数只接受到一次消息,但我明明连续执行了5次,按道理线程函数里接受5次消息的呀,最后我在postThreadMessage之间加了弹出框,即每次post间加AfxMessageBox()后, 相对应的线程函数里的消息循环里就能循环5次了。why
------------------------------------------------------------------------------------以下是线程函数,正常情况我postThreadMessage多少次,我的线程函数while循环
里就应该执行多少次,因为GetMessage(&msg,NULL,0,0)按道理是能捕获我post出去的消息的,现在的状况就是只执行一次while循环体,但是我若在多次PostThreadMessage间加MessageBox弹窗,就能保证我能GetMessage多少次,否则只能有一次效果,用Sleep间隔多个PostThreadMessage也没效果,线程函数也是只能捕获一次。---------------------------------------------------------------------------------------------------------------------------------------------------------------------
DWORD WINAPI PrintOutMd(LPVOID lpParameter) //行情输出打印线程函数
{ AfxMessageBox("PrintOutMd");
int a = 0;
CString s ="";
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
BOOL bRes = PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
if (bRes)
{
//在这里处理本线程的消息。
s.Format("%d--有消息处理", a++);
AfxMessageBox(s);
}else
{
AfxMessageBox(_T("CThreadMsg::Run() 无消息处理/r/n"));
}
}
return 1 ;
}__