|
"비동기로 실행하는 동안에는 작업을 수행할 수 없습니다."
라는 에러 메시지는 어떤 경우 나타 나나요?
Thread가 돌아가는 상황에서 폼의 버튼을 클릭하면 위와 같은 메시지 에러가 발생합니다.
그래서 쓰레드를 Suspend(); 시키고 작업을 진행후 종료되면 Resume(); 시켜도
위와 같은 메시지가 발생합니다.
문제는 항상 나타나는 에러가 아니고
나올때가 있고 나오지 않을때가 있다는 것입니다.
나올 경우 확률이 높기는 하지만..
어떤 경우 비동기에 대한 에러가 발생하는지 알려주세요.
빌더도 익숙치 않고 쓰레드도 익숙치 않고 ㅠㅠ 힘드네요
===============================================
제 소스입니다.
//쓰레드
__fastcall TIPMThread::TIPMThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
Priority = tpNormal;
}
//---------------------------------------------------------------------------
void __fastcall TIPMThread::Execute()
{
try
{
while(!Terminated)
{
//-- DB에서 실행여부를 확인
if(frmMain->funGetService())
//-- 서비스 실행 (Y)
{
frmMain->funSetInterface(0); // 화면을 바꿔줍니다.
//-- 실행 모드
frmMain->shaMonitor->Brush->Color = clYellow;
frmMain->lblStatus->Caption = "Message : 서비스 사용";
//-- 환경설정 GET
frmMain->funGetAgent();
frmMain->funGetType();
// - 서비스 실행
frmMain->funRUNService();
if(frmMain->btnExit->ShowHint == true) break;
if (!(frmMain->lblStatus->Caption == "Message : 서비스 중지 준비 중 입니다."))
{
//-- 대기 모드
frmMain->shaMonitor->Brush->Color = clSilver;
frmMain->lblStatus->Caption = "Message : 서비스 대기";
::Sleep(int(frmMain->AgentInfo.agnt_look) * 60000);
}
}
else
//-- 서비스 중지 (N)
{
frmMain->funSetInterface(1);
frmMain->funClearBLKIP();
}
frmMain->Refresh();
}
}
catch ( ... ) {}
}
//버튼 1
IPMThread->Suspend();
if (btnLoop->Caption == "중 지")
//-- Agent 실행 상태에서 진행(일시중지 버튼상태)
{
funSetService(1); // 에이전트에서 중지된 내용을 DB에 설정
lblStatus->Caption = "Message : 서비스 중지 준비 중 입니다.";
}
else
//-- Agent가 일시정지 상태 (시작 버튼상태)
{
funSetService(0); // 에이전트에서 실행된 내용을 DB에 설정
}
IPMThread->Resume();
frmMain->Refresh();
서비스 실행/중지
//버튼2 (이놈은 환경설정 폼을 하나 실행시킵니다.)
IPMThread->Suspend();
frmConfig->ShowModal();
//-- Agent Load Config
frmMain->funGetAgent();
frmMain->funGetType();
IPMThread->Resume();
if (exitFlag)
{
Close();
}
|