Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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
C++ 运行一个函数";“背景中”;WinForm(VS2010 c+;+;)的_C++_Winforms_Visual Studio 2010 - Fatal编程技术网

C++ 运行一个函数";“背景中”;WinForm(VS2010 c+;+;)的

C++ 运行一个函数";“背景中”;WinForm(VS2010 c+;+;)的,c++,winforms,visual-studio-2010,C++,Winforms,Visual Studio 2010,我有一个可以运行数小时的函数。。 我希望单击一个按钮,此函数将开始运行,单击另一个按钮(停止),此函数将停止(中断)-但问题是,当函数运行时,表单会“卡住”-并且没有单击按钮停止的选项。 那么,如何使函数在不阻塞窗体的情况下运行呢 第二个问题是如何使按钮停止-如何在函数运行时中断函数(函数外部…) 我的理由是创建一个只运行函数的新窗体。主窗体可以在运行时关闭此窗体-有更好的解决方案吗 谢谢 阅读一些关于线程的概念。WinAPI提供了启动新线程和控制新线程的两个函数,在MSDN中搜索它们-创建新表

我有一个可以运行数小时的函数。。 我希望单击一个按钮,此函数将开始运行,单击另一个按钮(停止),此函数将停止(中断)-但问题是,当函数运行时,表单会“卡住”-并且没有单击按钮停止的选项。 那么,如何使函数在不阻塞窗体的情况下运行呢

第二个问题是如何使按钮停止-如何在函数运行时中断函数(函数外部…)

我的理由是创建一个只运行函数的新窗体。主窗体可以在运行时关闭此窗体-有更好的解决方案吗


谢谢

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

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

与C++一起使用:

您的背景代码可以简单地在任务中运行,启动/停止按钮可以设置一个标志,指示任务是否应该处理工作


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

在主线程中,为计算任务创建一个运行数小时的工作线程。Win32 API
CreateThread
应该对此有所帮助,和

然后,您需要与工作线程通信,特别是在单击停止按钮时通知它停止。有很多方法,
PostThreadMessage
应该是最方便的方法之一


因此,当单击停止按钮时,一条消息将发布到您的工作线程,并且您的工作线程会定期检查主线程是否发出这种“停止”信号。您可以决定它是如何“定期”检查的,这反过来又决定了当发出“停止”信号时,您的工作线程的响应程度。

我看到了以下页面:。但是C++没有例子。它支持C++吗?谢谢@杜迪德:是的,这是一个.NET特性而不是C#特性。添加了一个关于C++使用的链接。@汉斯:我喜欢后台工作人员的任务并行库(虽然后台工作人员肯定会完成任务)。