使用Visual Studio Express的C ++ MultiThreading Express 2010表格应用程序

| 我正在开发一个Windows窗体应用程序,该应用程序连接到一块硬件,获取大量数据(〜1 GSample / sec),对其进行处理,并在单击按钮时将其吐到屏幕上。现在,我试图在一个可以随时启动/停止的循环中自动执行该过程,以便在调整采集硬件的输入时可以对其进行监视。我认为很明显,我需要在单独的线程上执行此操作,但是我在c ++ / cli中尝试执行此操作的时间很短-我发现了许多使用MFC的很好的示例, Express不支持。 具体来说:我的任务是按下Form1.h中处理的按钮,以调用主文件Acquisition.cpp中的函数,该文件包含以下代码(当前为无限循环)
void Form1::realTimeUpdate()  
{  
    // live is a boolean variable set by a button on the form
    while(live)  
    {  
        displayVariance(getVar(getQuadratures(100),nbrSamples));  
    }  
}  
我希望在单独的线程中执行此代码,以便主程序可以侦听用户请求以停止操作。没有线程,我目前必须强制退出程序(或将其设置为运行固定的次数)以停止它。 有什么建议我应该如何在单独的线程上运行此代码? 我已经(未成功)尝试了一些方法: 修改此Microsoft示例中给出的示例。问题:需要/ clr:oldSyntax选项,该选项与程序中的其他1300行代码不兼容。 尝试做我在Java中要做的事情(声明一个全局线程,并从代码的任何位置启动/停止它。问题:编译器不允许我声明一个全局System :: Threading.Thread 这个美丽的例子。问题:需要MFC。 任何建议将不胜感激!     
已邀请:
您可以使用BackgroundWorker或Thread来处理。但是,您需要确保将更新UI的工作部分编组回UI线程。 这是有关C ++ / CLI中的线程的教程。     
作为记录,在Reed关于使用BackgroundWorker的建议下,我筛选了此页底部的代码,并修改了我的代码,以便: 它创建了一个新的backgroundWorker BGWorker,其中BGWorker-> DoWork()调用了我的realTimeUpdate()函数。 主窗体上的按钮将根据进程是否正在运行来调用RunWorkerAsync()或CancelAsync()(由主程序中的布尔标志检查)。 现在将realTimeUpdate()函数传递给BackgroundWorker-
realTimeUpdate(BackgroundWorker^ worker, DoWorkEventArgs ^ e)
内部循环中的每个计算完成后,它将调用worker-> ReportProgress(result)函数。在BGWorker-> ProgressChanged()函数中,一个单独的函数upDataUI(int)在主窗体上绘制结果。 再次感谢您的帮助。     

要回复问题请先登录注册