2010-01-12 45 views
1

我目前正在为现有VCL应用程序开发新功能。该应用程序使用名为TeeChart的第三方包创建图表和静态图像。 有一个实例需要加载200万个数据点才能创建静态图像图表。但是,这需要一段时间才能加载,用户在应用程序 中无法执行任何操作,直到完成为止。因此,我宁愿创建一个工作线程来处理数据点,因此GUI不会冻结。如何为单个线程化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; 

什么东西创建工作线程时,我应该考虑什么?

如何在一种方法中发生所有数据处理时使用boost来创建线程setData(){...}

回答

1

你显然会想看看boost thread库。

这是(可能)比您想象的更复杂。将具有副作用的同步函数转换为异步函数并不重要。有些事情要考虑:

  • 将使用setData的来电者能够 处理“设置”操作不 正在做的函数返回时?
  • 如果正在进行中,您将如何确保关机期间的背景setData操作?
  • 你将如何处理你的GUI线程和 setData线程之间的共享状态 ,以至于不会导致比赛 条件?
  • 你需要一个“通知” 机制,所以GUI线程可以 刷新(或做点什么)当 背景setData完成?
  • 如果有人调用setData 而背景setData操作 未决,会发生什么情况?
相关问题