Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止仍在使用“停止”按钮计算的函数? 我有一个用VS2010编写的Visual C++应用程序, 我有两个按钮:“开始”和“停止”,第一个按钮调用一个需要花费大量时间处理的函数,因此在某个时刻,我想按停止按钮停止计算。但在我的应用程序中,“开始”按钮似乎仍然被单击(我认为它正在等待函数返回),而所有其他按钮似乎都被禁用。即使我有一个很棒的停止功能,我也不能激活,因为我不能点击停止按钮。解决方案、想法、使用线程、简单示例?谢谢。_C++ - Fatal编程技术网

如何停止仍在使用“停止”按钮计算的函数? 我有一个用VS2010编写的Visual C++应用程序, 我有两个按钮:“开始”和“停止”,第一个按钮调用一个需要花费大量时间处理的函数,因此在某个时刻,我想按停止按钮停止计算。但在我的应用程序中,“开始”按钮似乎仍然被单击(我认为它正在等待函数返回),而所有其他按钮似乎都被禁用。即使我有一个很棒的停止功能,我也不能激活,因为我不能点击停止按钮。解决方案、想法、使用线程、简单示例?谢谢。

如何停止仍在使用“停止”按钮计算的函数? 我有一个用VS2010编写的Visual C++应用程序, 我有两个按钮:“开始”和“停止”,第一个按钮调用一个需要花费大量时间处理的函数,因此在某个时刻,我想按停止按钮停止计算。但在我的应用程序中,“开始”按钮似乎仍然被单击(我认为它正在等待函数返回),而所有其他按钮似乎都被禁用。即使我有一个很棒的停止功能,我也不能激活,因为我不能点击停止按钮。解决方案、想法、使用线程、简单示例?谢谢。,c++,C++,您需要在另一个线程中运行计算。否则,gui将冻结,直到计算完成(因为此时只能完成一件事) 如果您正在使用一些现代编译器,请查看std::thread 其他解决方案是boost线程,甚至是microsoft线程 Button 1 -> onClick = { start thread -> { do stuff here } } BUtton 2 -> onClick = { close thread } 强制关闭线程时要小心,因为可能会泄漏内存 首先需要

您需要在另一个线程中运行计算。否则,gui将冻结,直到计算完成(因为此时只能完成一件事)

如果您正在使用一些现代编译器,请查看std::thread

其他解决方案是boost线程,甚至是microsoft线程

Button 1 -> onClick = 
{
    start thread -> { do stuff here }
}

BUtton 2 -> onClick = 
{
    close thread
}

强制关闭线程时要小心,因为可能会泄漏内存

首先需要导入名称空间

使用系统线程

然后使用以下代码:

Thread T=new Thread(Your Code Goes method name);


your method name()
{
// your code goes here
}
T.Start();

then 


T.Abort();

如果您的计算是一个循环,那么如果您的用户想要停止计算,那么在每次迭代时检查可能非常容易

在计算线程中:

while(compute){
    // one loop of computation
}
而GUI线程可以通过
停止
按钮将
计算
设置为false。 我希望有帮助

<>注释:在C++中,如java Swing等,GUI有它自己的线程(开发者不可见),并且你永远不应该在它里面做繁重的任务。例如,每个按钮的回调都应该尽可能小,以保持GUI的响应性。此线程的任务只是驱动您的应用程序。


BackgroundWorker非常适合此用途

您需要以异步方式运行耗时的函数,例如,在单独的线程中运行。Windows、linux、osx?C++11?Boost?我曾设想过这样一个解决方案,问题是使用msdn或Google我找不到任何有效的东西,因为语法,编译器不想识别线程!您使用的是什么编译器和什么标志?您可能还想发布一些代码示例。恐怕VS2010附带的编译器不支持std::threads。你必须使用boost线程,或者使用MS特定的解决方案,现在我可以肯定了!我必须从msdn的混乱中重新开始!另一种选择是使用不同的编译器,例如gcc或clang,更好地支持c++11特性,或者使用boost。这在当前的形式下似乎没有太大的用处。我猜你指的是.NET线程类?OP还没有提到使用.NET。我通常不建议使用
名称空间
,而且
线程t=new Thread(…)
中是否缺少
*