|
쓰레드 실행시 함수부분에서 다음과 같이 5개의 쓰레드를 만듭니다
HANDLE hThreads[5];
for(i = 0; i < 5 ; i++) {
hThreads[i] = (HANDLE) _beginthreadex(NULL,4096,&SecondThreadFunc,(void*)i,CREATE_SUSPENDED,&threadID);
}
for(i = 0; i < 5; i++)
ResumeThread(hThreads[i]);
MessageLoop(hThreads,USB_EruStatus.EruMax);
for(i = 0; i < 5; i++)
CloseHandle(hThreads[i]);
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
TFormMain *pOwner = new TFormMain((TComponent*)FormMain ); //여기서부터 에러 발생
flag = DATATRANSFER;
outmessage("Thread %2d has an ID if %u\n",(int)pArguments,GetCurrentThreadId());
pOwner->SCriticSection.Lock(); //크리티칼섹션
if(pOwner->Command1(flag,(int)pArguments)==PASS){
..............
}
pOwner->SCriticSection.Unlock();
_endthreadex( 0 );
return 0;
}
쓰래드에서 몇번째 쓰래드인지 알고 난뒤.Command1 함수를 실행합니다.
int MessageLoop(HANDLE* lphObiect, int cObject)
{
while(TRUE)
{
DWORD result;
MSG msg;
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if(msg.message == WM_QUIT) return 1;
DispatchMessage(&msg);
}
result = MsgWaitForMultipleObjects(cObject,lphObiect,FALSE,INFINITE,QS_ALLINPUT);
if(result == (WAIT_OBJECT_0 + cObject))
continue;
else
break;
}
}
TFormMain *pOwner = new TFormMain((TComponent*)FormMain ) 에서 부터 에러가 발생하는데
크리티컬 섹션 함수를 만들어 Lock 해주거나 아니면 Command1 함수 안에
크리티컬 섹션을 해주어도
Win32 Error 에러가 계속 발생합니다.어떻게 히면 될까여?
이 부분뿐만 아니라..함수 공유를 많이 사용해야 될거 같은데..
어떻게 하면 깔끔하게 해격할수 있을까여?
|