testThread는 어떻게 만드신 건가요? C++ 언어 차원에서 지원하는 thread는 없습니다.
윈도우에서 쓰레드를 쓰시려면 윈도우 API (CreateThread 등), Boost 라이브러리 등을 쓰셔야 합니다. 빌더도 있죠.
ProcessMessages() 는 실행 중간에 시스템에서 처리해야 하는 메시지가 있다면 그 것을 처리하라는 겁니다. 혹시라도 이것을 쓰레드 기능이라고 보셨다면 이 기능은 쓰레드 지원을 하지 않습니다.
김시환 님이 쓰신 글 :
: 빌더에서 자체 지원하는 TThread 를 사용했을 때는 UI 화면이 정상적으로 반응을 하는데요.
:
: C++ 에서 지원하는 Thread 를 사용해서 코팅을 했더니 thread가 동작하는 동안 UI의 반응이 죽어 있네요..
:
: #include <thread>
: //---------------------------------------------------------------------------
: void testThread(int Count)
: {
: for(int loop=0 ; loop<Count ; loop++)
: {
: Sleep(10) ;
: Application->ProcessMessages() ; // 있으나 없으나 동일하게 UI 가 얼어 버림
: }
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: thread t1(testThread, 200) ;
: t1.join() ;
: }
: //---------------------------------------------------------------------------
:
: testThread 가 동작하는 동안 UI가 꼼짝도 안하다가 testThread 동작이 완료 되면 정상으로 돌아 옵니다.
:
: 이렇게 UI 가 얼어 버리면 쓰레드 쓸 이유가 없는데 이게 빌더 문제인가요? 아니면 모든 컴파일러들의 공통적인
: 증상인가요??
:
: C++ 빌더 리오 10.2.2 버젼으로 테스트 하고 있습니다.
:
:
|