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
[12265] Re:[질문]쓰레드가 동작하다가 멈춰있는 경우가 생깁니다.
hongfox(붉은여우) [hongfox] 821 읽음    2001-11-02 14:45
hongfox입니다.

thread_A를 실행시키고 Windows NT의 TaskManager레서 해당 thread_A가
CPU점유율이 얼마나 되는지 확인 해 보세요....

만일 CPU점유율이 100%를 차지 한다면
function UpdateDisplay() 에서 While()문을 쓰고 있다면
         While()문 안에서 Sleep(250)정도를 주면은 두게 모두 동작할 겁니다.

이것은 thread_A가 다른 thread_B에게 CPU의 사용 할당을 넘겨주지를 못하게하여
발생되는 현상 입니다.


thread에서 200개의 Thread를 생성하고 무리없이 동작될려면 제의 경험상 평균 적으로
While()문에서 Sleep(250)을 주면 무리없이 프로세스의 CPU점유율이 많이 떨어 집니다.


많은 도움 되시기를.......


fbpsok 님이 쓰신 글 :
: 빌더 5.0 standard 버전을 사용하고 있습니다.
: 그런더 쓰레드를 사용하여 프로그램을 실행하니 자꾸 가만히 멈춰있는 경우가 생깁니다.
: 쓰레드 2 개를 생성하여 각각의 두 쓰레드는 다른 동작을 합니다.
:
: 쓰레드 생성은
: Thread_A * thread_A = new Thread_A(true);
: Thread_B * thread_B = new Thread_B(true);
:
: 이렇게 해주었고 Execute() 부분에서 Synchronize 처리안하고 그냥 생성했습니다.
: 2쓰레드가 동시에 동작해야 하니까(물론 어느정도 딜레이 는 괜찮음)
: __fastcall Tthread_A::Tthread_A(bool flag) : TThread(TRUE)
: {
:     FreeOnTerminate = true;
:     Resume();
: }
: //---------------------------------------------------------------------------
: void __fastcall Tthread_A::Execute()
: {
:     while(!Terminated) {
:         UpdateDisplay();
:     }
: }
: //--------------------------
: __fastcall Tthread_B::Tthread_B(bool flag) : TThread(TRUE)
: {
:     FreeOnTerminate = true;
:     Resume();
: }
: //---------------------------------------------------------------------------
: void __fastcall Tthread_B::Execute()
: {
:     while(!Terminated) {
:         UpdateDisplay();
:     }
: }
: //--------------------------
: 그리고 쓰레드가 하는일은 모터의 특성을 검사하는데...
: 모터를 앞, 뒤로 회전시키는것을 A, B 쓰레드가 100 번씩 해야한다고 가정하면(물론 제품은 별개)
: 어느쪽이든 한 쓰레드는 한 3번정도 가면 동작을 안하고 멈춰있습니다.
: 나머지 한쪽은 끝까지 동작합니다.
: 3번이 아니라 2번째, 1번째 그럴때도 있고.
: 아예 한번도 동작을 안할때 가 있습니다.
: 그러니까 아래와 같이 해주면 A, B 가 동작을 해야 하는데
:
: Thread_A * thread_A;
: Thread_B * thread_B;
:
: thread_A = new Thread_A(true);
: thread_B = new Thread_B(true);
:
: 둘중 하나는 아예 동작을 안하고 멈춰있을때도 있습니다.
: 그리고 쓰레드 안에서 시간을 계산하기 위해 difftime 을 쓰고 있습니다.
:
:

+ -

관련 글 리스트
12263 [질문]쓰레드가 동작하다가 멈춰있는 경우가 생깁니다. fbpsok 710 2001/11/02
12265     Re:[질문]쓰레드가 동작하다가 멈춰있는 경우가 생깁니다. hongfox(붉은여우) 821 2001/11/02
12271         Re:Re:[질문]쓰레드가 동작하다가 멈춰있는 경우가 생깁니다. fbpsok 818 2001/11/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.