|
안녕하세요!! 부산촌님입니다.
쓰레드로 프로그램 하고 있는데 도저히 풀리지 않는군요!!
어디가 문제인지도 모르겠구요!!
쓰레드 헤드를 아래와 같이 정의 했읍니다
class TThreadAIS123 : public TThread
{
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // must be 0x1000
LPCSTR szName; // pointer to name (in user addr space)
DWORD dwThreadID; // thread ID (-1=caller thread)
DWORD dwFlags; // reserved for future use, must be zero
} THREADNAME_INFO;
private:
TADOQuery *Qry;
AnsiString MMSI;
strMSG1 MSG1;
AnsiString SqlTxt;
int ShipUpDateCount;
void SetName();
protected:
void __fastcall Execute();
void __fastcall UpdateCaption();
public:
__fastcall TThreadAIS123(bool CreateSuspended,AnsiString mmsi,void * msg,int ShipCount,AnsiString Txt);
__fastcall virtual ~TThreadAIS123(void){threadcnt--;};
AnsiString __fastcall MakeSqlMessage123(void);
AnsiString __fastcall MakeSqlMessage5Update(void);
AnsiString __fastcall MakeSqlMessage5Insert(void);
int __fastcall SqlMsg5H(AnsiString MMSI);
};
//---------------------------------------------------------------------------
글구 스레드 본체를 다음과 같이 정의 하고
__fastcall TThreadAIS123::TThreadAIS123(bool CreateSuspended,AnsiString mmsi,void *msg,int ShipCount,AnsiString Txt)
: TThread(CreateSuspended)
{
FreeOnTerminate = true;
ShipUpDateCount = ShipCount;
MMSI = mmsi;
memcpy((void *)&MSG1,msg,sizeof(strMSG1));
SqlTxt = Txt;
threadcnt++;
}
//---------------------------------------------------------------------------
void TThreadAIS123::SetName()
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = "TThreadAIS123";
info.dwThreadID = -1;
info.dwFlags = 0;
__try
{
RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD),(DWORD*)&info );
}
__except (EXCEPTION_CONTINUE_EXECUTION)
{
}
}
//---------------------------------------------------------------------------
void __fastcall TThreadAIS123::UpdateCaption()
{
}
void __fastcall TThreadAIS123::Execute()
{
//SetName();
CoInitialize(NULL);
if(Qry==NULL){
Qry = new TADOQuery(NULL);
Qry->Connection = DB_Con;
}
try{
Qry->SQL->Text = SqlTxt;
Qry->ExecSQL(); //Table에 데이터 저장
}catch(...){
Qry->Free();
return;
}
//메시지 5H에 저장
try{
if(SqlMsg5H(MMSI)==1){
Qry->SQL->Text = MakeSqlMessage5Update();
}else{
Qry->SQL->Text = MakeSqlMessage5Insert();
}
Qry->ExecSQL(); //5H Table에 데이터 저장
}catch(...){
Qry->Free();
return;
}
Qry->Free();
//this->Terminate();
//CoUninitialize();
}
쓰레드 콜은 아래와 같읍니다.
if(CurruntMessageID == 1 || CurruntMessageID == 2 || CurruntMessageID == 3){
if(threadcnt<3){
TThreadAIS123 *AIS123 = new TThreadAIS123(false,MSG1.UserID,(void *)&MSG1,1,MakeSqlMessage123());
AIS123->Priority = tpTimeCritical;
AIS123->Resume();
}
return;
}
그렁데 이쓰레드 끝이 나질 안구요 Qry->SQL->Text = SqlTxt; 이부분에서
" 개체가 열려있으면 작업이 허용되지 않습니다 " 라는 에러가 뜨는군요!!!
도저히 알수가없어 도움을 요청합니다..
|