Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++ 如何为单线程GUI应用程序创建额外的工作线程?_C++_Multithreading_Boost_Vcl_Boost Thread - Fatal编程技术网

C++ 如何为单线程GUI应用程序创建额外的工作线程?

C++ 如何为单线程GUI应用程序创建额外的工作线程?,c++,multithreading,boost,vcl,boost-thread,C++,Multithreading,Boost,Vcl,Boost Thread,我目前正在为现有VCL应用程序开发新功能。该应用程序使用名为TeeChart的第三方包创建图表和静态图像。 有一个例子,我必须加载200万个数据点来创建静态图像图表。但是,这需要一段时间来加载,用户无法在应用程序中执行任何操作 直到它完成。因此,我更愿意创建一个工作线程来处理数据点,这样GUI就不会冻结 方法setData()设置以下成员变量,然后VCL组件将继续使用这些变量创建图表: // Holds the Y position for the image (columns) Dynamic

我目前正在为现有VCL应用程序开发新功能。该应用程序使用名为TeeChart的第三方包创建图表和静态图像。 有一个例子,我必须加载200万个数据点来创建静态图像图表。但是,这需要一段时间来加载,用户无法在应用程序中执行任何操作 直到它完成。因此,我更愿意创建一个工作线程来处理数据点,这样GUI就不会冻结

方法
setData()
设置以下成员变量,然后VCL组件将继续使用这些变量创建图表:

// Holds the Y position for the image (columns)
DynamicArray<double>* mpda_XValues;

// Holds the colour for the corresponding element in the x and y
// position
DynamicArray<double>* mpda_YValues;

// Holds the z position for the image (rows)
DynamicArray<double>* mpda_ZValues;
//保存图像的Y位置(列)
动态卡雷*mpdaxu值;
//保存x和y方向上相应元素的颜色
//位置
动态卡雷*mpda_值;
//保持图像的z位置(行)
动态卡雷*mpda_值;
<当创建一个工作者线程时,我应该考虑什么?< /P>
当所有的数据处理都发生在一个方法中时,我如何使用boost创建线程?

您显然需要查看库

这(可能)比你想象的要复杂。将具有副作用的同步函数转换为异步函数并非易事。需要考虑的一些事项:

  • setData的调用者是否能够 不处理“设置”操作 函数返回时正在执行
  • 如果正在进行后台设置数据操作,您将如何确保关机期间后台设置数据操作
  • 您将如何处理共享状态 在GUI线程和 设置数据线程,以免引起争用 条件
  • 你需要“通知”吗 机制,因此GUI线程可以 刷新(或做某事)当 后台设置数据完成了吗
  • 如果有人调用setData会发生什么 而后台设置数据操作 正在等待

    • 既然您使用的是VCL,那么最好看看TThread类。从中创建继承的类,并在与主线程通信时使用Synchronize方法。你可以试试看:和