用六个Connection,不用处理同步,起用事务和锁,让数据库自己去处理数据冲突问题.适用于Oracle、SQL Server等较完善的数据库。 如果安你原来的方式,所有的数据操作都是串行的,可以用一个Connection,把数据库访问的操作放到同一个线程中。参见这个贴子:http://www.csdn.net/Expert/TopicView1.asp?id=744355中mrzho的方案。 ????????????? ____ ____ \ p \ / g / \ l \_/ n / \ a o / \ i s / \ n / \_/
connection真的可使用datamodal的connection吗?
对vcl如何使用事件的方式,我也是直接调用其事件来实现的,但比如增加stringgrid的行时,可能还是要写代码(互斥)的。
欢迎继续讨论!!
"主线程创建各个线程的时候连接这些事件"
是何意?
TOnQueryRecord = procedure(pData:Pointer) of object;
主线程就是你的MainForm所属线程啦,
var QueryThread:TQueryThread;
begin
QueryThread := TQueryThread.Create;
QueryThread.OnQueryRecord := GetRecord;//这个Procedure是MainForm里的一个,如此而已。奉送一个Tip:不要使用Free释放线程,最好是用Terminate,并且设置线程为freeOnTerminate:=Tree;这样不会出错,否则,呵呵,你会头大无比。
一般的习惯是每个应用只使用一条数据库连接,使用数据模板来管理你对数据库的访问,即使是采用多线程方式也尽量不动态创建数据集控件,因为频繁的Create和Free会占用大量的系统资源,要是你没有处理好资源释放问题,可能你的系统每次运行会强行占用一些资源不能释放。
你可以将数据集控件作为参数传递给你的执行线程,注意在线程中及时释放数据集和互斥就可以,也不是很麻烦!
QueryThread.OnQueryRecord := GetRecord
另一个是用来做模板,放TAdoQuery等的.
每个线程都new一个模板线程使用,
用完注意释放掉就可以了。
哈哈,因为我每个线程做的都是同样的东西,
对我来说,这样做最好。
所以应该根据你线程间的关系来决定采用哪种方式。
我的情况和你差不多,我现在将connection改为使用dm中的connection,然后在线程中create query控件,不知可否?
如果安你原来的方式,所有的数据操作都是串行的,可以用一个Connection,把数据库访问的操作放到同一个线程中。参见这个贴子:http://www.csdn.net/Expert/TopicView1.asp?id=744355中mrzho的方案。 ?????????????
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/