我使用vs2010编写了一个应用程序visual c ++, 我有两个按钮:“开始”和“停止”,第一个调用一个需要花费大量时间来处理的函数,所以在某个时刻我想停止计算按停止按钮。但是在我的应用程序中,按钮启动似乎仍然被点击(我认为它正在等待函数的返回)并且所有其他按钮似乎被禁用。即使我有一个很棒的停止功能,我也无法激活,因为我无法点击按钮停止。解决方案,想法,使用线程,简单的例子?感谢。
答案 0 :(得分:2)
您需要在另一个线程中运行计算。否则你的gui会冻结,直到你的计算结束(因为此刻只能完成一件事)。
如果您正在使用一些现代编译器,请查看std :: thread。
其他解决方案是提升线程甚至是微软线程。
答案 1 :(得分:1)
如果你的计算是循环,那么如果你的用户想要停止计算,那么在每次迭代时都可以很容易地检查。
在计算线程中:
while(compute){
// one loop of computation
}
虽然您的GUI线程可以通过computation
按钮将stop
设置为false。
我希望它有所帮助
注意:在c ++中,如在Java Swing等中,GUI具有它自己的线程(对开发人员来说真的不可见),你永远不应该在其中执行繁重的任务。例如,按钮的每个回调都应尽可能小,以保持GUI响应。该线程的工作只是为了推动您的应用程序。
答案 2 :(得分:0)
Button 1 -> onClick =
{
start thread -> { do stuff here }
}
BUtton 2 -> onClick =
{
close thread
}
强行关闭线程时要小心,因为你可能会泄漏内存!
答案 3 :(得分:0)
http://msdn.microsoft.com/it-it/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx
BackgroundWorker非常适合这种用途!
答案 4 :(得分:-1)
首先,您需要导入命名空间
使用System.Threading;
然后使用以下代码:
Thread T=new Thread(Your Code Goes method name);
your method name()
{
// your code goes here
}
T.Start();
then
T.Abort();