连接占线导致另一个命令!! 找财务软件教程视频
各位:该怎么处理?如果采用数据库互斥,速度肯定慢了啊。如果采用多连接,不允许啊!!求求各位给个意见和说法!谢谢,等待。。。。。
2楼: 如果你不用线程同步,肯定是这个结果。我以前也是这样,不过你用了同步不会感觉速度有什么不同,因为即使多个客户端同时连接到数据库,数据库为了进行数据操作,也要进行将并行操作进行串行化。不过数据库的算法更复杂罢了。用线程同步对象吧,不然你的问题永远也解决不了。 如管家婆软件使用教程
3楼: 啊啊!!!给一个线程同步的例子算了!
4楼: 临界区
cs: TRTLCriticalSection;
begin
InitializeCriticalSection(cs);//这个操作最好在全局里建立,可以放在Initialzie
try
EnterCriticalSection(cs);
//数据操作代码 DataSet.Open;
finally
LeaveCriticalSection(cs);
end;
DeleteCriticalSection(cs); //全局里销毁 finallize
end;
5楼: 我使用了信号量:
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
while not Terminated and not G_Thread_Exit do
begin
inc(icount);
DoWork();
ReleaseMutex(hMutex);
end;
可是还是出现这个问题了。
6楼: 哦,不好意思,我弄错了,应该是:
while not Terminated and not G_Thread_Exit do
begin
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
inc(icount);
DoWork();
ReleaseMutex(hMutex);
end;
OK!
财务软件版7楼: 我也遇到过,见
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3268989
解决的办法是 数据库控件在多线程在建立即可。你漏
了TADOConnection 。补上没有问题的。
8楼: 呵呵,我只想建立一个连接,所以 网中戏 你的做法不可取!
9楼: 每个线程,建单独的连接即可。
10楼: 你还是多个连接嘛!
11楼: 同时信号量的方式实现了,同步,但是这样的话,速度上不去,怎么办??
12楼: 多人接受答案了。 如财务软件教程视频