|
CRITICAL_SECTION CriticalSection;
HANDLE hThreads[4];
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
InitializeCriticalSection(&CriticalSection);
startflg = 1;
unsigned a;
time_t SleepTime, WhatTime;
W = &ldbm;
ListBox1->Clear();
ListBox1->Items->Add("*************** AWSM Start ***************");
SleepTime = time(NULL);
W->INITTLDBM();
W->LDB_Connect();
W->Sel_StudyID();
ListBox1->Items->Add("--- Start Queue Retrieve---");
// Thread를 사용할 경우
Thread_Retrive *T;
for (int i=0; i < 4; i++){
T = new Thread_Retrive(i);
a = T->Handle;
hThreads[i] = &a;
}
DWORD dwResult = WaitForMultipleObjects(4, hThreads, TRUE, INFINITE);
if ( WAIT_OBJECT_0 == dwResult )
{
// 스레드가 종료되었을경우
W->LDB_Close();
W->FINALTLDBM();
}
else
{ //스레드가 종료되지않았을경우
ListBox1->Items->Add("스레드가 끝나지 않았다");
}
}
__fastcall Thread_Retrive::Thread_Retrive(int TheNum): TThread(true)
{
FreeOnTerminate = true;
ThreadNum = TheNum;
Resume();
}
//---------------------------------------------------------------------------
void __fastcall Thread_Retrive::Execute(void)
{
p = &q_ob;
while(p->head)
{
EnterCriticalSection(&CriticalSection);
UpdateThread();
LeaveCriticalSection(&CriticalSection);
}
}
//---------------------------------------------------------------------------
void __fastcall Thread_Retrive::UpdateThread(void)
{
AnsiString Study_Num;
AnsiString aa;
switch (ThreadNum){
case 0:
case 1:
case 2:
case 3:
p = &q_ob;
aa = ThreadNum;
Study_Num = p->Retrieve();
Form1->ListBox1->Items->Add(Study_Num + "Thread Number = " + aa);
W = &ldbm;
W->AWSMStart(Study_Num);
Form1->ListBox1->Items->Add(Study_Num + "Thread Number = " + aa);
break;
}//switch
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
DeleteCriticalSection(&CriticalSection);
}
//---------------------------------------------------------------------------
이렇게 되는소스가 있는데요.
스레드 돌아가는 부분은 잘 도는데....
WaitForMultipleObjects()함수 쓰는곳이 계속 else로 가네요.
그래서
if ( WAIT_OBJECT_0 == dwResult )
{
// 스레드가 종료되었을경우
W->LDB_Close();
W->FINALTLDBM();
}
스레드 Object가 종료되었을경우
이부분을 돌릴려고하는데...
자꾸 else부분으로 가서 안도네요...
DWORD dwResult = WaitForMultipleObjects(4, hThreads, TRUE, INFINITE);
이부분을 잘못쓴건지 아님
써야할 위치가잘못된것인지 모르겠습니다.
답변좀 부탁드립니다.
설명이 넘 장황했나??? --;;
|