0

我有一个使用vs2010编写的应用程序visual c++,我有两个按钮:“开始”和“停止”,第一个按钮调用一个需要很多时间来处理的函数,所以在某个时刻我想停止计算按下停止按钮。但是在我的应用程序中,按钮开始似乎仍然被点击(我认为它正在等待函数的返回)并且所有其他按钮似乎都被禁用了。即使我有一个很棒的停止功能,我也无法激活,因为我无法单击停止按钮。解决方案,想法,使用线程,简单的例子?谢谢。

4

5 回答 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 回答