线程中synchronize的简单问题(100分)

  • 主题发起人 主题发起人 ahjie
  • 开始时间 开始时间
A

ahjie

Unregistered / Unconfirmed
GUEST, unregistred user!
如果线程中
procedure testThread.Execute;
begin
synchronize(myprocedure);
end;

这样写,是不是所有的工作都在主线程中做了?
是不是这样就等于是单线程啊?
delphi各个版本中,这个有区别么?
 
1.是
2.不是,比单线程效率还低,因为还要申请/释放线程本身
3.尽管synchronize的实现方式不同,但没有区别
 
Agree with Another_eYes
 
实现多线程,最好不要用
synchronize(myprocedure);
除非myprocedure时间很短。
 
是呀,最好不要在线程中涉及到同步,因为同步效率太低,有时还不如用消息代替同步呢。
 
各位兄弟,我现在的问题是:
我在主程序里面建立了好多ADOConnection的数组,分别连接不同的数据库。
也就是每个数据库有几个连接,类似于连接池。
但我在线程里面涉及到数据的查询,必然要用到连接。
因为AdoConnection.connected:=true,是需要时间的,所以不希望在每个线程里面都新建一个连接。不知道该怎么处理啊~
我是个多线程新手,发现前任程序员在程序里写了上面的代码,真是晕倒,现在需要改。
 
没有太好的办法,如果数据不经常变动,到可以用本地Filter,要不还是老老实实每个线程一个Connection,因为Connection不是线程安全的.
 
我在主程序中建立的connection都是已经连接上的
所以我希望能够在线程里面调用这些connection,赋给query
一个线程一旦调用其中一个connection后,这个connection就不能被别的线程调用
这样也就保证了其实每个线程用的都是独立的connection。
如果我把判断connection是否已经被使用的条件写在tag里面,这样在线程里判断的时候,
会不会也引起问题呢?
老是新建connection会不会增加数据库服务器的负担啊??
qince的qq号是多少,交个朋友吧~ 我的QQ号:272291171
 
多人接受答案了。
 
后退
顶部