C++ 如何为单线程GUI应用程序创建额外的工作线程?
我目前正在为现有VCL应用程序开发新功能。该应用程序使用名为TeeChart的第三方包创建图表和静态图像。 有一个例子,我必须加载200万个数据点来创建静态图像图表。但是,这需要一段时间来加载,用户无法在应用程序中执行任何操作 直到它完成。因此,我更愿意创建一个工作线程来处理数据点,这样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
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方法。你可以试试看:和