连续调用PostThreadMessage只能响应一次线程函数,若放置messagebox就没问题

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  ;

}__

如果我将弹窗AfxMessageBox("send success");换成Sleep(500),同样while循环执行5次,
post用if判断也是走send success条件语句,同样延时了,

还是不能保证我的线程函数消息队列接受到5次响应,

以下为我的线程函数:
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  ;

}

Post太快了 来不及响应
如果非要以最快的速度响应的话 我的办法是直接调用线程中自定义的函数

http://blog.csdn.net/ooyyee11/article/details/7474000