|
혹시나 해서 해 봤는데 마찬가지 군요.
전홍진 님의 생각이 맞는듯 합니다.
아이디어를 내 봐야 겠네요.
김시환 님이 쓰신 글 :
: 소스를 보니 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]) ;
: }
: //======================================================
|