1.使用多线程应该是最好的方法了!
类封装线程的一种技巧
CMainFrame::CMainFrame()
{
CreateThread(NULL, 0, ThreadFunc, this, 0, NULL);
}
static DWORD WINAPI CMainFrame::ThreadFunc(LPVOID lparam)
{
return ((CMainFrame*)lparam)-> ThreadRun();
}
CMainFrame::ThreadRun(void)
{
// 在线程里做想做的事
return 0;
}
2.重载消息循环.例子如下:
void CDoeventsDlg::DoEvents()
{
MSG msg;
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { //从Windows消息队列中取出消息
if (msg.message== WM_QUIT)//如果消息为退出,发送退出消息
{
::PostQuitMessage(-1);
}
if(!AfxGetApp()-> PreTranslateMessage(&msg))//如果无法预处理消息
{
::TranslateMessage(&msg);//转换消息
::DispatchMessage(&msg);//发送消息
}
}
AfxGetApp()-> OnIdle(0);AfxGetApp()-> OnIdle(1);//消息队列为空时闲置一段时间
}