怎么实现这样的循环终止?全局变量,还是其他的什么方式,欢迎各位来指点。100分相送。 To fireflyxx(星) :有没有现成的例程给我一个,贴出来也可以,我已经晕了。再开一个线程可能要影响到程序执行的时间了(即程序执行时间增加) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 线程函数:UINT count(LPVOID pParam){ int i; for (i=0;i<10000;i++) { 计算过程 } }再程序中用 CWinThread *pthread=::AfxBeginThread(count,this,THREAD_PRIORITY_NORMAL);开启线程 主程序声明一个CEvent变量m_event,构造函数中m_event(FALSE,TRUE),在启动线程之前调用ResetEvent。线程函数同楼上,传入参数应该包含这个CEvent变量,在计算过程中加入if(::WaitForSingleObject(pMonitor->m_event,0) != WAIT_TIMEOUT) return之类的代码。要求线程结束的处理代码可以为m_event.SetEvent();::WaitForSingleObject(m_pThread,INFINITE);m_pThread是线程对象指针。 To fireflyxx(星) :有没有用SDK写的代码? MFC我不熟。主要是开启线程的API函数。 MSG msg; if (PeekMessage(&msg, NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg);} 用SDK写的关于线程的代码? MFC我不熟。请各位提供一点关于SDK方面关于线程的函数。主要是开启线程的API函数。 HANDLE hThread=CreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId,};第五个参数为0 线程开始 CREATE_SUSPENDED为暂停线程CloseHandle(hThread) 关闭线程 在你的大循环中加入如下的语句,可以保证程序有机会相应其它的消息,你也就有机会终止这个大循环while(flag) //假设这是你的大循环{ ...... //你的循环处理过程 MSG msg; if(PeekMessage(&msg, NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); }} SetTimer不行!还是建议多线程! 最好用多线程,如果不用多线程同意kwzzt(kwzzt)的做法。 最好还是用:HANDLE hThread=CreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId,};另外开一个线程来处理你的循环为好,为了简单,你可以在你的用一个全局的变量在你的主控线程和新开的线程共享来实现主控线程希望你的循环线程终止的时候让他终止。 wpxs0303(纹坪秀士):本来就应该用多线程,大家都说对不一定就不好,你下棋从来不走定式吗? 其实 kwzzt(kwzzt)的方法也不错只是 如果程序对实时性要求较高的话 可能会来不及处理 to wpxs0303(纹坪秀士)你说不用多线程该如何解决呢?多线程是解决这个问题最好的办法。不想开多线程就参考kwzzt(kwzzt)的办法。差不多可以说,这两种方法就是定式。过多讲究技巧的人才是可悲的。 只需要在循环中加入消息处理机制即可,前面fireflyxx和kwzzt都是这种思路,这么简单的问题还要用多线程?原因很简单,因为你的循环处理时,在没有跳出函数时,该进程不处理其他的消息,这时候菜单或者鼠标当然没有响应了,只要加入处理机制即可解决 “搜索建议”的解析 怎么创建一个非动态对话框? 判断鼠标的位置。。。 WriteFile这个函数 用CByteArray怎么实现? 在html help workshop中如何显示首页 AfxBeginThread()中第二个参数LPVOID pParam的使用... 为什么拦截不到WM_COMMAND消息? 在线等 相位相关法求图像平移量 送分,有谁知道任我行软件公司吗,以前做管家婆的那个?知道的评价一下. 请问高手们啊!我做的网站用IE和netscape浏览的问题 ListView中如何以表格的画线形式显示 一个愚笨的问题!但还是麻烦您帮忙!
{ int i;
for (i=0;i<10000;i++)
{
计算过程
}
}
再程序中用 CWinThread *pthread=::AfxBeginThread(count,this,THREAD_PRIORITY_NORMAL);
开启线程
if(::WaitForSingleObject(pMonitor->m_event,0) != WAIT_TIMEOUT)
return
之类的代码。要求线程结束的处理代码可以为
m_event.SetEvent();
::WaitForSingleObject(m_pThread,INFINITE);
m_pThread是线程对象指针。
if (PeekMessage(&msg, NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
LPSECURITY_ATTRIBUTESlpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId,
};
第五个参数为0 线程开始 CREATE_SUSPENDED为暂停线程
CloseHandle(hThread)
关闭线程
while(flag) //假设这是你的大循环
{
...... //你的循环处理过程
MSG msg;
if(PeekMessage(&msg, NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
还是建议多线程!
HANDLE hThread=CreateThread(
LPSECURITY_ATTRIBUTESlpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId,
};
另外开一个线程来处理你的循环为好,为了简单,你可以在你的用一个全局的变量在你的主控线程和新开的线程共享来实现主控线程希望你的循环线程终止的时候让他终止。
你下棋从来不走定式吗?
你说不用多线程该如何解决呢?多线程是解决这个问题最好的办法。不想开多线程就参考kwzzt(kwzzt)的办法。差不多可以说,这两种方法就是定式。
过多讲究技巧的人才是可悲的。
原因很简单,因为你的循环处理时,在没有跳出函数时,该进程不处理其他的消息,这时候菜单或者鼠标当然没有响应了,只要加入处理机制即可解决