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
[13966] Re:[질문]멀티 쓰레드에서 UDP소켓사용시
조청현 [] 1745 읽음    2001-12-27 12:04

CriticalSection 이 Release 가 되지 않으면 당연히 EnterCriticalSection
함수에서 대기하게 되겠죠. 그말은 CriticalSection 으로 둘려쌓인 코드블럭
을 빠져나오지 못한 쓰레드가 있다면 다른 쓰레드 계속 블럭킹된 상태에 머물
러 있을 수 밖에 없을겁니다. 일단 udp 관련 코드가 의심스러우시면 항상 종료
되는 다른 코드를 넣으셔서 다시 한번 테스트를 해보세요. 현재 보여주신 코드
만으로는 이말밖에 해드릴것이 없네요.

쓰레드 프로그램에서는 "불확정성의 원리" 가 적용되어 거의 확실한 듯하지만
미리 인지하기 힘든 부분이 블랙홀이 있을 수 있으니 특히나 신경을 많이 쓰셔
서 디자인하셔야 됩니다.

그럼 "멋진 엔지니어의 꿈"을 이루시길 바랍니다.



공부중 님이 쓰신 글 :
: 멀티쓰레드를 생성(약 20개쯤)하여 UDP소켓을 이용하여
: 데이타를 전송하는 프로그램을 작성하였습니다.
: 쓰레드상에서 다음과 같이
:
: void __fastcall ThreadProc::Execute()
: {
:  ..................
:
:        //           A1
:        EnterCriticalSection(&CriticalSection);
:        dxinfo[ChanNo].ip_receive = 0;
:        Form1->udp2->RemoteHost = HostIP;
:        Form1->udp2->SendBuffer(buff,31,30);
:        LeaveCriticalSection(&CriticalSection);
:
: }
: 멀티쓰레드에서 데이타를 보내야 하니까 CriticalSection을 이용하여
: 쓰레드간에 동기화를 시키고 빌더에 있는 UDP 컴포넌트를 이용하여 다른
: PC에 데이타를 전송하는 프로그램입니다.
: 그런테 하루에 1번쯤 A1부분에서 멈춰져 있습니다.
: 전체 쓰레드가 멈춘것인지 1개 쓰레드만 멈춘것인지 모르겠지만
: 종료후 다시 실행하면 예전같이 다시 돌아가고 왜 가끔가다 1번씩
: 이상이 있는지 원인을 모르겠슴다.
: 어느 부분에서 논리적인 에러가 있나요.
:
: EnterCiriticalSection으로만 사용하면 멀티쓰레드에서 사용하는데
: 이상은 없는것이죠..

+ -

관련 글 리스트
13933 [질문]멀티 쓰레드에서 UDP소켓사용시 공부중 1778 2001/12/26
13966     Re:[질문]멀티 쓰레드에서 UDP소켓사용시 조청현 1745 2001/12/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.