我希望能够在自己的线程中异步打开TDataSet,以便主VCL线程可以继续,直到完成,然后从该TDataSet读取主VCL线程.我做了一些实验并且遇到了一些非常奇怪的情况,所以我想知道是否有人之前做过这件事.
我已经看到一些示例应用程序,其中TDataSet是在一个单独的线程中创建的,它已打开,然后从中读取数据,但这都是在单独的线程中完成的.我想知道在另一个线程打开数据源之后从主VCL线程读取TDataSet是否安全.
我在Delphi 7中进行Win32编程,使用DAC for MySQL的 TmySQLQuery 作为我的TDataSet后代.
如果您只想在自己的线程中使用数据集,则可以使用synchronize与主线程进行通信以进行任何VCL/UI更新,就像使用任何其他组件一样.
或者,更好的是,您可以使用自己的消息传递系统实现mainthread和worker线程之间的通信.
查看Hallvard的线程解决方案:http:
//hallvards.blogspot.com/2008/03/tdm6-knitting-your-own-threads.html
或另一个:http:
//dn.codegear.com/article/22411
有关同步及其低效率的一些解释:http:
//www.eonclash.com/Tutorials/Multithreading/MartinHarvey1.1/Ch3.html