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++使用的链接。@汉斯:我喜欢后台工作人员的任务并行库(虽然后台工作人员肯定会完成任务)。