一个老问题:如何在多线程和Midas中进行数据库操作?
我搜了以前的帖子,可是对这个问题,大家的说法都不一样!
我现在的问题是
在多线程中,进行数据可操作,发上我以前的代码
void __fastcall TTokenRing::Execute()
{
int i;
while(!Terminated)
{
for(i=1;i<=SignalNumber;i++)
{
if((SignalList(i).Type>=0 && SignalList(i).Type<=MAXWAITTIMES)
|| SignalList(i).Type==SUCCESSCONNECTION)
{
varTRSignalID=SignalList(i).SID;
CommSvr->PutCommData(MakeNewTokenRing(TRSignalID));
LastRefashTime=Date()+Time();
GetBackTR=false;
Application->ProcessMessages();
while(!GetBackTR)
{
pLockDM->Acquire();
if(((Date()+Time())-LastRefashTime)>WaitLongestTime)
{
if(SignalList(i).Type==SUCCESSCONNECTION)
{
SignalList(i).Type=0;
sid=varTRSignalID;
type=0;
tm=0;
SysInfo->ISID =SysParaSvr->ServerID;
SysInfo->IDID =varTRSignalID;
SysInfo->User =" ";
SysInfo->IDateTime =Date()+Time();
SysInfo->IMessage =2;
SysInfo->IType =2; //cuo wu
Synchronize(RefashSignalType); //写数据库
Synchronize( SysInfo->WriteSystemInfo); //写数据库
pLockDM->Release();
break;
}
if(SignalList(i).Type>=0 && SignalList(i).Type<MAXWAITTIMES)
{
SignalList(i).Type++;
sid=varTRSignalID;
type=SignalList(i).Type;
tm=0;
Synchronize(RefashSignalType);
pLockDM->Release();
break;
}
else
{
SignalList(i).Type=-1;
sid=varTRSignalID;
type=-1;
tm=0;
Synchronize(RefashSignalType);
SysInfo->ISID =SysParaSvr->ServerID;
SysInfo->IDID =varTRSignalID ;
SysInfo->User =" ";
SysInfo->IDateTime =Date()+Time();
SysInfo->IMessage =3;
SysInfo->IType =1; //cuo wu
Synchronize( SysInfo->WriteSystemInfo);
pLockDM->Release();
break;
}
}
pLockDM->Release();
Application->ProcessMessages();
}
if(GetBackTR && SignalList(i).Type!=SUCCESSCONNECTION)
{
pLockDM->Acquire();
SignalList(i).Type=SUCCESSCONNECTION;
sid=varTRSignalID;
type=SUCCESSCONNECTION;
tm=Date()+Time();
Synchronize(RefashSignalType);
SysInfo->ISID =SysParaSvr->ServerID;
SysInfo->IDID =varTRSignalID ;
SysInfo->User =" ";
SysInfo->IDateTime =Date()+Time();
SysInfo->IMessage =1;
SysInfo->IType =3; //cuo wu
Synchronize( SysInfo->WriteSystemInfo);
pLockDM->Release();
}
}
}
Application->ProcessMessages();
}
}
这样写对吗?可是为什么程序运行得很慢?