如何停止仍在使用按钮停止计算的功能
How to stop a function which is still computing with button stop?
我有一个使用vs2010编写的应用程序visual c++,我有两个按钮:"开始"answers"停止",第一个按钮调用一个需要大量时间处理的函数,所以在某个时刻,我想按下停止按钮停止计算。但在我的应用程序中,启动按钮似乎仍然被点击(我认为它正在等待函数的返回),所有其他按钮似乎都被禁用了。即使我有一个很棒的停止功能,我也不能激活,因为我不能点击按钮停止。解决方案、想法、使用线程、简单的示例?谢谢
您需要在另一个线程中运行计算。否则,你的gui会冻结,直到你的计算完成(因为目前只能做一件事)。
如果您正在使用一些现代编译器,请查看std::thread。
其他解决方案是boost线程,甚至是microsoft线程。
如果您的计算是一个循环,那么在每次迭代时检查用户是否想要停止计算可能会很容易。
在计算线程中:
while(compute){
// one loop of computation
}
而GUI线程可以通过stop
按钮将computation
设置为false。我希望它能帮助
注意:在c++中,就像在JavaSwing等中一样,GUI有自己的线程(对开发人员来说并不可见),你永远不应该在其中做繁重的任务。例如,按钮的每个回调都应该尽可能小,以保持GUI的响应。这个线程的工作只是驱动你的应用程序。
Button 1 -> onClick =
{
start thread -> { do stuff here }
}
BUtton 2 -> onClick =
{
close thread
}
强制关闭线程时要小心,因为可能会泄漏内存!
http://msdn.microsoft.com/it-it/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx
BackgroundWorker非常适合此用途!
首先需要导入名称空间
使用System.Threading;
然后使用以下代码:
Thread T=new Thread(Your Code Goes method name);
your method name()
{
// your code goes here
}
T.Start();
then
T.Abort();
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 递归函数计算序列中的平方和(并输出过程)
- 以小于一毫秒的精度计算时间的功能
- 在 OpenCV 中计算 SURF 功能之间的距离
- 是否有C 功能来计算两个索引之间的距离
- 如何使用不同的功能计算三个数字的总和,平均值和产物
- (指针)降低测试分数后计算平均功能的问题
- 编译后如何计算某些二进制功能(或基本块)的校验和
- 使用功能计算总和和平均值的程序
- C++的最后一个位置是否有计算单元的标准功能
- opencv 断言在计算 HOG 功能时失败错误 438
- 是否有类比升压计算功能
- 租车里程超额计算功能
- 通过变异模板计算功能
- 创建循环功能以计算成本
- 一个简单的C 功能,在不同的计算机上具有不同的答案
- 编译时间递归函数以计算两个整数的下一个功能
- 如何停止仍在使用按钮停止计算的功能