首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

可怜,今天接触C++第四天,就要面临这种有关问题

2014-01-12 
可怜,今天接触C++第四天,就要面临这种问题。本帖最后由 woyaodubo 于 2014-01-10 18:09:19 编辑在while没有

可怜,今天接触C++第四天,就要面临这种问题。
本帖最后由 woyaodubo 于 2014-01-10 18:09:19 编辑 在while没有结束之前,窗体似乎不能接受任何消息,就死在那里。
上网找了下,说要用到线程。这不是折磨我吗。

void CllkDlg::OnAutoA()
{
int i=ClientNum();
int time=this->m_ms;
UpdateData(true);
while (i!=0)
{
Sleep(time); 
Done();
i-=1;
}
}

[解决办法]
PeekMessage()
[解决办法]
引用:
在while没有结束之前,窗体似乎不能接受任何消息,就死在那里。
上网找了下,说要用到线程。这不是折磨我吗。

void CllkDlg::OnAutoA()
{
int i=ClientNum();
int time=this->m_ms;
UpdateData(true);
while (i!=0)
{
Sleep(time); 
Done();
i-=1;
}
}


这个函数是main调用的?
如果是main调用的,那么这个函数不结束,那么main这个主线程就会一直在处理这个函数,
而窗体处理消息的逻辑也是在main里面调用的,所以main就来不及调用窗体处理消息的逻辑了。
[解决办法]
void DoEvents()
{
    MSG msg;
    BOOL result;

    while ( ::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE ) )
    {
        result = ::GetMessage(&msg, NULL, 0, 0);
        if (result == 0) // WM_QUIT
        {                
            ::PostQuitMessage(msg.wParam);
            break;
        }
        else if (result == -1)
        {
             // Handle errors/exit application, etc.
        }
        else 
        {
            ::TranslateMessage(&msg);
            :: DispatchMessage(&msg);
        }
    }
}


void CllkDlg::OnAutoA()
{
    int i=ClientNum();
    int time=this->m_ms;
    UpdateData(true);
    while (i!=0)
    {
        Sleep(time);
        DoEvents(); 
        Done();
        i-=1;
    }
}

热点排行