다른 스레드를 사용하여 다른 COM 포트에서 데이터를 열고 다운로드하는 테스트 콘솔 응용 프로그램을 만들려고합니다. 데이터를 다운로드 한 후 WaitForMutipleObjects()를 사용하여 모든 스레드에서 다운로드가 완료 될 때까지 기다립니다.WaitforMultipleObjects() 함수를 사용할 때 스레드가 실행되지 않습니다.
WaitForMultipleObjects(nThreadCount,m_threadHandle,true,INFINITE);
하지만 작동하지 않고 스레드가 실행되지 않고 반환됩니다. 여기 내 스레드 함수입니다.
void* Test::GetData(void *p)
{
Test *pThis = (Test *)p;
string strCOMport;
int nChannelNo,nBaudRate;
cout<< " Enter COM port "<<endl;
cin>>strCOMport;
cout<< " Enter Channel Number"<<endl;
cin>>nChannelNo;
cout<< " Enter Baud Rate "<<endl;
cin>>nBaudRate;
if(pThis->InitPort(nChannelNo,0x00,(unsigned char *)strCOMport.c_str(),nBaudRate,0x00) == 0x00)
cout<< "Init port Success"<<endl;
else
{
cout<< "failed";
return NULL;
}
// download
ExitThread(0);
}
이들은
작성하고 각각 스레드를 대기하는 기능입니다void Test::init()
{
m_threadHandle[nThreadCount] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)GetData,(LPVOID)this,0,&m_dwThreadID[nThreadCount]);
nThreadCount++;
}
void Test::WaitForThreads()
{
WaitForMultipleObjects(nThreadCount,m_threadHandle,true,INFINITE);
}
왜 스레드 기능이 갑자기 반환?
또한'CreateThread()'가'nThreadCount'를 증가시키기 전에 실제로 성공했는지 확인해야합니다. 그렇지 않으면 잘못된 핸들을 WaitForMultipleObjects()에 전달할 것입니다. –
@RemyLebeau 어떻게'CreateThread()'가 성공했는지 어떻게 알 수 있을까요? –
@BrianLeishman 설명서를 읽는 것으로 시작하십시오. 그것은 : * __ 반환 값 __이 함수가 성공하면 반환 값은 새 스레드의 핸들입니다. 함수가 실패하면 반환 값은 NULL입니다. 확장 된 오류 정보를 얻으려면 GetLastError를 호출하십시오. * –