|
소스를 보니 232포트 객체를 메인 폼의 멤버로 두셨네요...
제 경우는 232포트 객체를 전역객체로 사용했습니다.
그리고 세마포어 보다는 크리티컬섹션을 사용했습니다.
크리티컬섹션 객체 역시 전역으로 선언했습니다.
아래의 것들을 모두 Global.Cpp 를 만들어 전역으로 선언해서 사용했습니다.
SerialComm* pSerialPort[MODULE_NUM] ; // Serial Port object
CRITICAL_SECTION g_Critical_Section[MODULE_NUM] ; // Critical Section object
Meas_Control* pThread_Cont[RACK_NUM][MODULE_NUM] ; // Thread object
그리고 메인이 되었건 전역함수가 되었건 쓰레드가 되었건
포트를 사용할 때 아래처럼 사용하면 전혀 데드락 없이 잘 동작했습니다.
//============= 포트 사용할 때 방법=========================
try
{
EnterCriticalSection(&g_Critical_Section[m_iCommNumber]) ;
pSerialPort[m_iCommNumber]->Write(data, strlen(data)) ;
memset(data, 0x00, sizeof(data)) ;
Sleep(50) ;
pSerialPort[m_iCommNumber]->Read(data, cnt) ;
}
__finally
{
LeaveCriticalSection(&g_Critical_Section[m_iCommNumber]) ;
}
//======================================================
|