如何停止仍在使用按钮停止计算的功能

How to stop a function which is still computing with button stop?

本文关键字:计算 功能 按钮 何停止      更新时间:2023-10-16

我有一个使用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();