|
초보 빌더 유저 님이 쓰신 글 :
: 안녕하세요..
: 간단히 멀티 스레드 프로그래밍 테스트 프로그램 짜고 있는데요..
:
: --> 소스를 보시고 직접 돌려 보셔서 지적해 주시면 감사하겠습니다.
:
: 폼 생성시 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);
}
}
|