运行 WinForm 的函数"In Background" (VS2010 c++)



我有一个运行了几个小时的函数。我想,在点击一个按钮,这个函数将开始运行,并在点击另一个按钮(停止)这个函数将被停止(中断)-但问题是,表单变得"卡住"当函数运行-没有选项点击按钮停止。那么如何使函数运行而不卡住形式?

第二个问题是我如何使按钮停止 -我如何打破一个函数,而它运行(在函数之外…)

我的理由是创建一个新的形式,将只运行函数..和主要形式将可以关闭这个形式,而在运行-有没有更好的解决方案?

谢谢!

阅读一些关于线程的概念。WinAPI提供了两个函数来启动和控制新线程,在MSDN中搜索它们——创建一个新窗体不是最好的方法。

在主线程中,为运行数小时的计算任务创建一个工作线程。Win32 API CreateThread应该对此有所帮助。请参阅此处的函数帮助,以及此处的示例。

然后,你需要与你的工作线程通信,特别是,当你的停止按钮被点击时,通知它停止。相当多的方法,PostThreadMessage应该是最方便的一个这样做。参考这里的函数帮助。

所以,当停止按钮被点击时,一个消息将被发送到你的工作线程,你的工作线程定期检查你的主线程是否发出了这个"停止"信号。你可以决定它如何"周期性"检查,这反过来又决定了你的工作线程在发出"Stop"信号时的响应程度。

如果你可以使用。net 4,看看任务并行库。这是迄今为止处理。net(包括WinForms)应用程序线程的最简单方法。

http://msdn.microsoft.com/en-us/library/dd460717.aspx

与c++一起使用:

http://msdn.microsoft.com/en-us/library/gg675934.aspx

你的后台代码可以简单地在任务中运行,并且开始/停止按钮可以设置一个标志,指示任务是否应该处理工作。

听起来,现在,您正在处理发送给用户界面的消息的同一个线程上工作。如果用户界面线程正忙于计算,它就无法拾取停止按钮的单击事件。

最新更新