DLL与多线程的问题,还有一个ADO与多线程的问题(在线等待)(300分)

  • 主题发起人 主题发起人 nanami
  • 开始时间 开始时间
N

nanami

Unregistered / Unconfirmed
GUEST, unregistred user!
问题1
我在线程中间动态装入了一个DLL,然后调用了其中的函数,我把这些放在一个线程过程中间,调试中出了这个过程后,好像这个线程就不存在了,奇怪的很,请帮忙看看关键代码:
procedure TRecvObj.Execute;
begin
OnTerminate := frmMain.RecvThreadDone;
{使用临界区,区分对公共资源的访问}
repeat
Sleep(1);
EnterCriticalSection(crsRecv);
ConnectToSvr;
{!!就是这个函数里面有问题。运行通过了这个函数后,线程里面的一些私有属性就无法访问了,跟踪该变量显示:inaccessible value}
LeaveCriticalSection(crsRecv);
Synchronize(DispMainList);
SaveRecvDX;
ProcessRecvDX;
until F_Exit;
end;

下面是该过程代码:
procedure TRecvObj.ConnectToSvr;
var
nResult,nState : integer;
lbHandle : THandle;
begin
lbHandle := SafeLoadLibrary(PChar(GetCurrentDir + '/CMPPAPI.DLL'));
try
@FConnect := GetProcAddress(lbHandle,'Connect');
if not (@FConnect = nil) then
F_Conn_ID := FConnect(PChar(F_SvrIPAddr),F_Port,PChar(F_UserName),PChar(F_Password));
@F_Disconnect := GetProcAddress(lbHandle,'Disconnect');
if not (@F_Disconnect=nil) then
nResult := F_Disconnect(F_Conn_ID);
finally
FreeLibrary(lbHandle);
end;
end;

请问是什么原因呢?
问题2
另外,在线程中使用ADOQuery来处理数据(查询和更新),查询可以并行,更新是不是需要用临界区来隔离开?还有就是临界区变量可不可以创建多个?分别用来隔离不同的代码块?
谢谢,高分恭候。
 
怎么这么快就看不见了?是不是分数不够啊?分数不够可以加啊。
 
接受答案了.
 
后退
顶部