C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[49198] Re:스레드 동기화 문제 - 힘듭니다.
김시환 [godson2] 1597 읽음    2007-05-08 15:12
소스를 보니 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]) ;
        }
//======================================================

+ -

관련 글 리스트
49192 스레드 동기화 문제 - 힘듭니다. worldfip 1746 2007/05/08
49198     Re:스레드 동기화 문제 - 힘듭니다. 김시환 1597 2007/05/08
49200         Re:Re:스레드 동기화 문제 - 힘듭니다. worldfip 1539 2007/05/08
49193     Re:스레드 동기화 문제 - 힘듭니다. 권상득 1559 2007/05/08
49195         Re:Re:스레드 동기화 문제 - 힘듭니다. worldfip 1369 2007/05/08
49201             Re:Re:Re:스레드 동기화 문제 - 힘듭니다. 공부맨 1929 2007/05/08
49194         Re:Re:스레드 동기화 문제 - 힘듭니다. 전홍진 1694 2007/05/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.