你能做到吗? 自己重载消息循环。对BUTTON消息自己以线程方式处理。或者重载CBUTTON类,在其中实现自己的消息循环(此方法不知有没有可行性) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你试试WaitForSingleObject函数!! 什么互斥、信号量、WaitForSingleObject我都试过了,都不能有简易的实现方法,你们能试试吗? 一定要把OnButton1Click()里的函数作为另一个线程吗??? 如果Button1要执行一个长时间的动作,而且可以中途随时用Button2中止或暂停,专业的做法是应用Multi-thread, 在OnButton1()中使用CreateThread 建立工作线程返回hThread,在OnButton2()中可以用SuspendThread(hThread)暂停,或TerminateThread(hThread)强行中止这个工作线程。 to newx: 一定要把OnButton1Click()里的函数作为另一个线程吗??? CMyDlg::OnButton1Click(){ ... 中途挂起 MSG Message; while (::PeekMessage(&Message, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&Message); ::DispatchMessage(&Message); } ...} CMyDlg::OnButton1Click(){ ...while(中途挂起的条件满足){MSG Message; while (::PeekMessage(&Message, NULL, 0, 0, PM_REMOVE)) {::TranslateMessage(&Message);::DispatchMessage(&Message);}} ...} 我是想在OnButton1Click()处理过程中,能响应其它事件(如单击Button2) 为你的窗口增加一个函数DoEvents(),然后在任何需要执行长时间操作的地方,增加一条对DoEvents的调用。这种方法无需多线程,简单实用。void CMyDlg::DoEvents(){ MSG msg; if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message== WM_QUIT) { ::PostQuitMessage(-1); } if (!AfxGetApp()->PreTranslateMessage(&msg)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } AfxGetApp()->OnIdle(0); AfxGetApp()->OnIdle(1); } 开发OCX的问题; 简单问题,有源码,怎么解除4k限制 访问MDI子窗口列表出错,请教 CListView中右击某条纪录后在弹出菜单的响应函数中显示一个对话框,对话框界面无响应?????? C++中能不能把主函数main做为一个类的成员函数? vc中的数据库网络编程 小问题,在做课程设计时遇到的^_^ ODBC的CRecordset类如何得到纪录绩的行数 关于debug的问题, <Inside ATL>问题一个 请问市面上有什么关于WinAPI的好书!! 关于DDK的问题
一定要把OnButton1Click()里的函数作为另一个线程吗???
CMyDlg::OnButton1Click()
{
... 中途挂起
MSG Message;
while (::PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&Message);
::DispatchMessage(&Message);
} ...}
{
...while(中途挂起的条件满足)
{
MSG Message;
while (::PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&Message);
::DispatchMessage(&Message);
}
}
...}
void CMyDlg::DoEvents()
{
MSG msg;
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message== WM_QUIT)
{
::PostQuitMessage(-1);
}
if (!AfxGetApp()->PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
AfxGetApp()->OnIdle(0);
AfxGetApp()->OnIdle(1);
}