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
[28110] Re:빌더로 멀티스레드 프로그램 짜던중 질문 입니다.
임문환.실업자 [origin] 1286 읽음    2003-12-04 15:39
초보 빌더 유저 님이 쓰신 글 :
: 안녕하세요..
: 간단히 멀티 스레드 프로그래밍 테스트 프로그램 짜고 있는데요..
:
: --> 소스를 보시고 직접 돌려 보셔서 지적해 주시면 감사하겠습니다.
:
: 폼 생성시 CreateThread로 스레드 헨들을 생성하고..(8개의 스레드 생성)
: 버튼을 누르면 그것들이 스레드를 Resume시키구요..
: ThreadFunc에서 하는 일은 ProgressBar의 position을 2씩 증가 시키는 것인데요..
: 각 스레드를 생성하면 한번만 실행되고 그 다음에 멈추는데.. 이해가 되지 않네요..
: Suspend를 명시적으로 해주기 전에는 100까지 계속 증가 되어야 할것 같은데..
:
: 답변을 주시면 정말 감사하겠습니다.
:
:
:
:

님의 코드 중 ThreadFunc 함수는 콘솔 애플리케이션으로 말하자면 main과 유사한 역할을 하는 것입니다.
따라서, ThreadFunc 함수가 return 하면 해당 스레드의 실행이 종료되는 것이지요.
만약 계속해서 ProgressBar의 위치를 증가시키고 싶다면 ThreadFunc 함수 내에서 for 문이나 while 문을 써야 합니다. 물론 이때 해당 루프의 종료 조건을 주어야 폭주를 막을 수 있겠구요.
님의 ThreadFunc 함수 내에서는 각 스레드가 자신에게만 할당된 ProgressBar를 사용하니까 큰 문제가 없겠으나 두 개이상의 스레드가 동일한 ProgressBar를 액세스하게 된다면 각종 동기 메커니즘(CriticalSection,Event,Semaphore 등) 중 적절한 것을 골라 써야 합니다.

DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
const int nIdx = (int)lpParam;
while(!종료조건)
{
    pBar[nIdx]->Position += 2;
    Sleep(1000);
}
}

+ -

관련 글 리스트
28109 빌더로 멀티스레드 프로그램 짜던중 질문 입니다. 초보 빌더 유저 1152 2003/12/04
34121     Re:빌더로 멀티스레드 프로그램 짜던중 질문 입니다. 강영준 945 2003/12/04
28114     Re:빌더로 멀티스레드 프로그램 짜던중 질문 입니다. 김용수 1505 2003/12/04
28110     Re:빌더로 멀티스레드 프로그램 짜던중 질문 입니다. 임문환.실업자 1286 2003/12/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.