|
혹시, Thread에서, Form1의 Control에 접근할때~
void __fastcallTMyThread::Execute()
{
...
Synchronize( (TThreadMethod)HaHaHaFunction);
...
}
해주셨나요??? 아님.. 죄송.. ^^
프로그램을 돌려라~~~
초자순이 님이 쓰신 글 :
: 안녕하세요
:
: 알고 싶은게 있어서 이렇게 글을 올립니다.
:
: 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에 있는 컴포넌트를 실행하고 싶은데 방법이 없을까요?
:
: 전체적인 루틴을 바꾸고 싶지은 않습니다.
:
:
:
:
|