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
[40640] Re:[질문] 쓰레드 질문 2 입니다.
smleelms [smleelms] 1000 읽음    2005-06-20 14:06
기본적으로는 제가 만들어드린 소스와 설명하신 방법과는 동일합니다.
말그대로 버튼의 입력에 따라 상태가 변하는냐.. 아니면 DB의 값이 변했는냐.. 즉 상태체크 루틴이 다를 따름이지 상태만 체크가 되면 이후에는 동일루틴이 됩니다.

현재 사용하시는 루틴을 보면 현재 쓰레드가 Resume() 상태인지, 아닌지와는 상관없이 무조건 fEnableService 함수가 실행이 되고 있네요. DBLoad() 함수의 결과가 false이면 굳이 suspended 되어 있는 함수를 suspend() 시키고, resume 되어 있는 함수를 또 Resume() 시키시는 결과가 되는것 같습니다만...

또 프로그램에서 쓰레드엑세스 오류가 난다고 하셨는데.. 쓰레드 2개의 실행과 종료, 상태값들의 변화등을 조금더 찬찬히 살펴보셔야 될것 같습니다.

일단 말씀하신 내용들이 반영이 될수 있도록 소스를 다시 수정해봤습니다.
도움이 되시기를..

초보빌더 님이 쓰신 글 :
: smleelms님 예제 소스 잘 보았습니다. ^^
: 이번 질문은.. 쓰레드가 자기 자신을 멈추고 다른 쓰레드를 실행 시킬 수 있는지입니다.
: smleelms님의 예제는 메인폼에서 버튼의 입력에 따라 쓰레드가 왔다갔다하잖아요.
: 제가 하고 싶은건..
: Th1이 돌기 시작하면 주기적으로 DB를 살펴가면서 업무를 처리하다가 DB에 값이 변하면
: Th1을 Suspend시키고 Th2를 Resume 시키고요.
: Th2가 Resume 되면 Th1과 마찬가지로 DB를  살펴가면서 업무를 처리하다가 DB에 값이 변하면
: Th2를 Suspend시키고 Th2를 Resume시킵니다.
:
:
: MainForm Active시
: if(DBLoad())
: {
:    frmMain->fEnableService(true);
: }
: {
:   frmMain->fEnableService(false);
: }
: 으로 쓰레드가 돌기 시작하고
: 그후 쓰레드에서 쓰레드를 제어? 해야하는데..
:
: 그래서 Main폼에 fEnableService(bool) 함수를 만들어서
: 각 쓰레드에
: if(DBLoad())
: {
:    frmMain->fEnableService(true);
: }
: {
:   frmMain->fEnableService(false);
: }
: 를 넣었습니다.
: fEnableService는
: true이면 Th1=Suspend; Th2=Resume;
: 시키고
: false이면 Th1=Resume; Th2=Suspend; 시키는 함수입니다.
: 프로그램을 실행시키면... (예제로 만든건 아니고요 제가 작성하던 프로그램에..)
: 프로그램이 실행되다가 DB값에 변경이 일어나면.
: 쓰레드 억세스가 오류가 났다고 합니다.
: 이런 저런 방법으로 코딩해보는데.. 잘 안되네요.
: >,.< 답변 부탁드릴께요 ..

+ -

관련 글 리스트
40635 [질문] 쓰레드 질문 2 입니다. 초보빌더 860 2005/06/20
40640     Re:[질문] 쓰레드 질문 2 입니다. smleelms 1000 2005/06/20
40642         답변 감사합니다. 초보빌더 821 2005/06/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.