如何不用线程解决这个问题,请进...(100分) 我有一个程序,在窗体上有一个按钮,比如说叫“start”。当我点击按钮时,按钮变为“stop”,程序进入一个较大的循环来处理一些事情;如果点击“stop”按钮退出大循环。问题是:当这个大循环运行完毕前,程序会像死了一样,此时“stop”按钮不能点击。原因是这个循环以阻塞方式运行。可以用线程来解决,但是有没有办法不使用线程来解决呢?关键是如何解决大循环运行后,“stop”按钮不能点击的问题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不行的。windows程序是以进程为单位,进程本身是没有活动能力的,必须在进程里面运行线程来,而你所描述的程序实际上已经有了一个主线程,也就是界面线程,如果你在这个线程里面去进行你的大循环的话,那肯定会阻塞界面。当然,也可以让你的大循环运新一段时间,就停一下,来达到界面线程得到消息响应,但是这样做恐怕不是你所要的效果。 在循环里调AfxGetApp()->PumpMessage(); 两个办法,1。如楼上在循环里调AfxGetApp()->PumpMessage();2。把循环去掉,执行体放在OnTimer中,用按钮SetTimer和KillTimer。 点击StartBOOL m_bStart;OnStart(){ m_bStart = TRUE; for(int i=0;i<10000;i++) { AfxGetApp()->PumpMessage(); if( !m_bStart ) break; //处理 } }OnStop{ m_bStart = FALSE;} 将大循环放到一个函数中,然后绑定一消息,在按钮消息里发送PostMessage(消息); 子对话框 改变大小 onsize 一个很弱智的问题: 如何更好的读、改别人的已有代码。 某公司游戏平台源码 急急,GetItemText(nItem, nSubItem)可以得某行某列中的str,请问,怎么取得该行列下的LVCFMT_?在线= VC结果可否转换成视频 请各位帮忙,可能那个帖子我该发在这里,但是发错地方了!加分在那里:) 我已经被多线程绕晕了,放分,明天上班前结帖 编译问题: 求助!!! Tree ctrl怎么获取下一个节点文本 一大型集团公司,在全世界有N个子公司......帮我! 请问这段程序有什么问题
当然,也可以让你的大循环运新一段时间,就停一下,来达到界面线程得到消息响应,但是这样做恐怕不是你所要的效果。
AfxGetApp()->PumpMessage();
BOOL m_bStart;
OnStart()
{
m_bStart = TRUE;
for(int i=0;i<10000;i++)
{
AfxGetApp()->PumpMessage();
if( !m_bStart )
break;
//处理
}
}OnStop
{
m_bStart = FALSE;
}