或使用临界段:
var
Critical1:TRTLCriticalSection;
在线程CREATE事件时 InitializeCriticalSection(Critical1);
在线程DESTORY事件时 DeleteCriticalSection(Critical1);
在线程EXECUTE事件 :
EnterCriticalSection(Critical1);
try
.... //对本地数据库进行操作
....
....
....
finally
LeaveCriticalSection(Critical1);
end;
var
Critical1:TRTLCriticalSection;
在线程CREATE事件时 InitializeCriticalSection(Critical1);
在线程DESTORY事件时 DeleteCriticalSection(Critical1);
在线程EXECUTE事件 :
EnterCriticalSection(Critical1);
try
.... //对本地数据库进行操作
....
....
....
finally
LeaveCriticalSection(Critical1);
end;
解决方案 »
- DBGgrid控件开发
- Dbl := DeweApp.Data.Groups.Item[1].Item[0].Offset;这句话是什么意思
- Flash控件SmartFlash v1.5使用问题
- 问个关于edt显示的问题
- 如何让StringGrid中的数据与AdoQuery的记录集保持同步?
- 让字符串固定长度输出不够用空格代替
- 客户端SocketConnection能过internet连接服务器出错,怎么回来呀
- 夜猫,来领分了
- 怎样开发这样的工程(描述如下)
- 我一打开IE浏览器,进程中就会出现sapisvr.exe,而且占用CPU很厉害,我该如何去掉?
- 如何存取数据库图片呢?
- 求一个好用的UDP控件?
我的两个线程都是这样写的
procedure MyThread1.Execute;
begin { Place thread code here }
freeonterminate:=true;
MyPro1;
end;
procedure MyThread2.Execute;
begin
{ Place thread code here }
freeonterminate:=true;
MyPro2;
end;
这样我该把临界量放在什么地方呢?
请指教!!
最好详细点!
数据冲突可以用信号量控制
例如: hMutex:=CreateMutex(nil,True,'Mutex001');
对不起,国庆节我回家了,好久没有上网了,现在对你的问题做一下回答:
1--->>>如果你用是用临界段:
你如果是在一个窗体文件UNIT1.PAS中写了两个线程MYTHREAD1,MYTHREAD2;
你就在窗体中定义一个全局临界段变量
var
Critical1:TRTLCriticalSection;
在窗体的CREATE事件时 InitializeCriticalSection(Critical1);
在窗体的DESTORY事件时 DeleteCriticalSection(Critical1);
在相应的数据库的操作过程中
(如果是你两个线程同时调用一个访问数据库的操作,你只需将下列代码写在其中;若为了两个,你只需在
两个过程中加入下列代码,《下面同》)
EnterCriticalSection(Critical1);
try
.... //对本地数据库进行操作
....
....
....
finally
LeaveCriticalSection(Critical1);
end;
你如果是在一个纯PAS文件(没有窗体)中定义两个线程,你可以在两个线程定义中加入:
public
constructor create;override;
destructor destory;override;
end;
然后在相应的create和destory事件中加入
InitializeCriticalSection(Critical1);
DeleteCriticalSection(Critical1);
《下同》2--->>>如果你是用互斥量:
你如果是在一个窗体文件UNIT1.PAS中写了两个线程MYTHREAD1,MYTHREAD2;
你就在窗体中定义一个全局临界段变量
var
hmutex:thandle;
在窗体的CREATE事件时 hmutex:=createmutex(nil,false,nil);
在窗体的DESTORY事件时 closehandle(hmutex)
在相应的数据库的操作过程中
waitforsingleobject(hmutex,INFINITE)
try
.... //对本地数据库进行操作
....
....
....
finally
releasemutex(hmutex);
end;不知上面的解释你明白否?如还有问题,你可以写信到我的信箱:[email protected]