procedure TWorkThread.Execute;
begin while not Terminated do
begin
try
// if FEvent > 0 then
EnterCriticalSection(FIsLock);
FTaskWork(FADOQuery);
finally
LeaveCriticalSection(FIsLock); end;
//Sleep(10); WaitForSingleObject(FEvent, INFINITE); end;end;请问大家 我可以把 EnterCriticalSection(FIsLock);
LeaveCriticalSection(FIsLock);放到 FTaskWork(FADOQuery); 这个函数里面吗? FTaskWork是一个对象的函数 并非线程里的函数 这样我在线程里去掉EnterCriticalSection(FIsLock);
LeaveCriticalSection(FIsLock);
放到对象的函数里面去是一样的效果吗?这样会引起对象访问冲突么?
begin while not Terminated do
begin
try
// if FEvent > 0 then
EnterCriticalSection(FIsLock);
FTaskWork(FADOQuery);
finally
LeaveCriticalSection(FIsLock); end;
//Sleep(10); WaitForSingleObject(FEvent, INFINITE); end;end;请问大家 我可以把 EnterCriticalSection(FIsLock);
LeaveCriticalSection(FIsLock);放到 FTaskWork(FADOQuery); 这个函数里面吗? FTaskWork是一个对象的函数 并非线程里的函数 这样我在线程里去掉EnterCriticalSection(FIsLock);
LeaveCriticalSection(FIsLock);
放到对象的函数里面去是一样的效果吗?这样会引起对象访问冲突么?
例:
procedure TWorkThread.Execute
var
ObjImport:TObjImport;
begin
try
EnterCriticalSection(FIsLock);
objImport.Execute//另一对象的接口函数;
finally
LeaveCriticalSection(FIsLock);
objImport.free;
end;
end;
但
try
// if FEvent > 0 then
EnterCriticalSection(FIsLock);
FTaskWork(FADOQuery);
finally
LeaveCriticalSection(FIsLock); end; FTaskWork(FADOQuery); 如果你这个处理比较费时间的话,其它线程会一直等下去。