这个问题与此类似,但背景不同.
编译器:Delphi 2010,即将推出Delphi XE5.
我已经构建了一个很好的应用程序,通过ZEOS组件管理远程MySQL服务器上的数据.由于连接可能失败并且SQL很慢,我使用了整齐的OmniThreadLibrary来创建一个SQL服务器看门狗并卸载了很多"只读"表加载到线程.截至目前,我在主窗体显示之前手动创建了三个数据模块,每个模块都有独立的TZConnection和一些链接到同一数据模块TZConnection的TZReadOnlyQuery组件.每个线程从其自身内部实例化其相关数据模块,然后执行查询.
看门狗工作得很好,但我对第二部分有疑问,那就是"只读"表格线程.查询已经工作但我还没有在主应用程序业务代码中使用他们的结果,我必须在其他表上插入和更新数据.
在我的计划中,我在主应用程序甚至连接它们之前读取并加载了所有这些"只读"数据集(整个线程间状态机已经完成).理论上应该没有并发问题,因为"只读"表线程已完成其任务并且现在处于空闲状态.但我不知道如果此时我将控件或其他数据集/数据源/从主窗体连接到空闲线程数据模块会发生什么.
我会搞砸,因为主要形式TZSession与线程数据模块不一样吗?只有在交付申请后才能发现罕见且令人讨厌的访问违规行为(当然!).基本上我应该使用什么样的信心或预防措施来访问在另一个线程中创建的查询组件,假设只有主应用程序执行它并且仅用于读取数据?它甚至可能/健康吗?或者我错过了一些"最佳实践"的方式吗?
提前致谢.