一个模式对话框的问题
对话框上两个按钮,一个是按钮启动一个数学运算程序(需要计算一段比较长的时间),在运算过程中用另外一个按钮发送一个CANCLE消息关闭对话框,然后发现运算程序还在继续运算,并且这个时候只要计算没有完成就直接关闭主窗口程序就会报错。这是为什么?
难道关闭模式对话框后,在对话框中启动的运算程序是不会停止的吗?
问题点数:5、回复次数:8Top
1 楼cjn2009(水寒)回复于 2006-03-07 09:25:25 得分 0
米人能解释下么?Top
2 楼ysc918(白纸人生)回复于 2006-03-07 09:32:46 得分 0
如果运算程序是另一个exe的话,应该不会停止的。Top
3 楼cjn2009(水寒)回复于 2006-03-07 14:57:38 得分 0
不是另外一个exe啊,只是个数学运算,就像是
int i=1
i=i++
这样一类的数学运算Top
4 楼ysc918(白纸人生)回复于 2006-03-07 18:27:45 得分 0
用另外一个按钮发送一个CANCLE消息关闭对话框
------------------------------
你说的像是中断运行似的,我不清楚,你用OnOK()试试
Top
5 楼soong0313(天山雪人)回复于 2006-03-07 18:30:46 得分 0
用多线程?
一个用户计算,一个接收用户输入?
不是很明白你的问题Top
6 楼cjn2009(水寒)回复于 2006-03-08 00:06:07 得分 0
用消息控制,不知道怎么说哈,程序代码就是
MSG message;
.....
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
用个简例来说明下问题:
比如对话框一个按钮是start他的函数是启动一个很长的for循环计算,假如这个这个for循环计算完成需要5分钟。在5分钟之内我用另外一个按钮终止对话框(就认为是一个cancle按钮),这时候发现for循环计算还在继续,但是对话框都已经终止了运算怎么还会继续运算呢?而且只要for循环没完成就直接关闭主窗口程序就会出错,这是什么原因?
Top
7 楼cjn2009(水寒)回复于 2006-03-08 14:25:11 得分 0
那位大大解释下啊?Top
8 楼Darter()回复于 2006-03-08 14:42:53 得分 5
你想想,你发了一个CANCEL消息过去后,有人给你停止For循环了吗?你只是中止对话框,Window也只是一个Destory.然后释放资源,但并不会去停止你的For,所以出错了.在终止对话框的时候,你必须要保证一点:不在访问改对话框的任何资源.
可以在For中设置一个事件来响应Cancel消息.建议在大的数据计算的时候用多线程实现.Top




