|
|
①ADOProcedure1
ADO存储过程控件向表table2插入数据,属于线程1频繁使用
①ADOProcedure2
修改ADOProcedure1插入的记录,属于线程1频繁使用
其中线程3和线程2使用ADO控件时没有加锁,而线程1的所有访问都加锁了(这样做毫无作用)
程序的结构出来了,问题在哪里呢?接下来我写了一个小小的测试程序,该程序的结构与上面相同,它拥有三个线程和一个DataMoule单元,线程一通过ADOQuery1查询数据库DBTest的table1的记录,线程二通过ADOQuery2向table1中插入记录,线程三通过ADOQuery3修改table1中最后一条记录的某个字段。ADOQuery1、ADOQuery2、ADOQuery3都通过ADOConnection1与数据库DBTest1建立连接,一开始,所有的线程都不做同步,运行,OK!错误出来了其中两个错误正是我所想要的,这就是我的程序报的错啊。
图二
接下来我将三个ADOQuery都加上锁,再运行没问题,我又将ADOQuery分别通过三个不同的ADOConnection来连接数据库且不加锁也没有问题。看来我是找到那个可恶的炸弹了,怎么拆了它?
排除炸弹
炸弹找到了,我该怎么拆它?是简单的做线程同步还是每个线程都是用一个ADOConnection?这下我再也不敢蛮干了,我得好好看看这方面的资料,在Delphi帮助文档,《Using the main VCL thread》我找到了下面一段话:
……
Data access components are threa
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
网友评论:(评论内容只代表网友观点,与本站立场无关!) |
阅读排行
|