首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中,TDataSet线程是安全的吗?

在Delphi中,TDataSet线程是安全的吗?
EN

Stack Overflow用户
提问于 2008-09-16 23:56:00
回答 6查看 4.8K关注 0票数 14

我希望能够在它自己的线程中异步打开一个TDataSet,这样主VCL线程就可以继续,直到它完成,然后让主VCL线程从那个TDataSet读取。我做了一些实验,遇到了一些非常奇怪的情况,所以我想知道以前是否有人这样做过。

我见过一些示例应用程序,其中TDataSet是在单独的线程中创建的,打开它,然后从它读取数据,但这一切都是在单独的线程中完成的。我想知道在另一个线程打开数据源之后,从主VCL线程读取TDataSet是否安全。

我正在用Delphi7进行Win32编程,使用来自DAC for MySQL的TmySQLQuery作为我的TDataSet后代。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-17 08:28:47

如果您只想在dataset自己的线程中使用dataset,则可以只使用synchronize与主线程通信,以便进行任何VCL/UI更新,就像使用任何其他组件一样。

或者,更好的做法是,您可以使用自己的消息传递系统实现主线程和辅助线程之间的通信。

在这里查看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

票数 5
EN

Stack Overflow用户

发布于 2008-09-17 00:10:24

我在TDataSet的其他实现中(即在Asta组件中)也看到过这种情况。它们将联系服务器,立即返回,然后在数据加载后触发一个事件。

但是,我相信这在很大程度上取决于组件。例如,除了主VCL线程之外,这些相同的Asta组件不能以同步方式打开。

因此,简而言之,我不认为这是TDataSet本身的限制,而是特定于实现的东西,并且我无法访问您提到的组件。

票数 4
EN

Stack Overflow用户

发布于 2008-09-17 01:22:56

关于在多个线程之间使用相同的TDataSet,需要记住的一件事是,您只能在任何给定时间读取当前记录。因此,如果您正在一个线程中读取记录,然后另一个线程调用Next,那么您就有麻烦了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/78475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档