|
안녕하세요
알고 싶은게 있어서 이렇게 글을 올립니다.
formcreate()
{
주스레드가 돕니다.
부스레드 4개를 만들어서 돕니다.
WaitForMultipleObjects()를 써서 주스레드를 부스레드가 끝날때까지 기다리게 합니다.
부스레드 4개가 다 terminate되면
주스레드가 동작합니다.
}
전체적인 루틴은 이렇습니다.
잘 돌아갑니다.
근데 부스레드에서
Form1->ListBox1->Items->Add("Thread Number = " + aa); //여기서 aa는 AnsiString이다.
이런식으로 Form1에 접근할려고 하면 부스레드부분에서 스레드가 멈춥니다.
즉 파일 에세스, DB 에세스할때는 아무이상없습니다... 다른 연산을 할때도 아무이상없다가
Form1에 있는 컴포넌트를 실행할라구 하면 그냥 멈처버립니다.
제 생각은 주스레드가 WaitForMultipleObjects()로 인해서 기다리고 있을때 Form1에 있는 컴포넌트 실행하는것두 영향을 받는것 같습니다.
주스레드에서 WaitForMultipleObjects()를 안쓰구 부스레드만 돌리면 아무문제없이 돌아가는데
WaitForMultipleObjects()를 쓰면 그렇게 멈쳐버립니다.
혹시나 해서 SetEvent(hEvent)로 이벤트를 사용하고 WaitForSingleObject(hEvent,INFINITE);를 사용해보았습니다.
그래도 또한 부스레드에서 Form1에 접근할려고 하면 부스레드부분에서 스레드가 멈쳐버립니다.
이유가 무엇인지 잘 모르겠구요.
Form1에 있는 컴포넌트를 실행하고 싶은데 방법이 없을까요?
전체적인 루틴을 바꾸고 싶지은 않습니다.
|