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
[12271] Re:Re:[질문]쓰레드가 동작하다가 멈춰있는 경우가 생깁니다.
fbpsok [] 818 읽음    2001-11-02 16:40
운영체제를 win98 로 사용하는데...
그리고 만약 Sleep 을 준다면 A , B 중 어느쓰레드에다 주어야 합니까.
while 문 처음에다 Sleep 주어야 합니까 아니면 마지막에다 주어야 합니까
thread_A = new Thread_A(true);
thread_B = new Thread_B(true);
이렇게 했는데 A 보다 B 가 빨리 실행되는것 같은데...
답변 감사하고 한번더 부탁드립니다.

hongfox(붉은여우) 님이 쓰신 글 :
: 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(붉은여우) 822 2001/11/02
12271         Re:Re:[질문]쓰레드가 동작하다가 멈춰있는 경우가 생깁니다. fbpsok 818 2001/11/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.