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