궁금한 점이 있이서 이렇게 답글을 올립니다.
smleelms 님이 Thread 의 Execute 함수 안에서는 폼을 제어할때 Synchronize() 를 사용해야 한다고
하셨습니다. 그럼 Application->ProcessMessage() 는 어떤가요?
Application->ProcessMessage() 를 Synchronize() 안에서 사용한다면 아무런 문제가 발생하지 않나요?
아니면 Application->ProcessMessage() 는 VCL 의 Thread 안에서는 사용하면 안되는 건가요?
smleelms 님이 쓰신 글 :
: 참고해 보시기 바랍니다.
:
: http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=26516
: http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=28252
:
: 아마도 쓰레드내에서 폼을 건드리시기 때문일겁니다.
: 저도 이걸 모를때는 한참 애먹었었는데... InsertItem 같은 것을 상관이 없지만요.
:
: 결론은 폼을 건드리실때는 Synchronize() 함수를 사용하셔서 메인 쓰레드로 돌려야 된다는겁니다.
:
: 그럼, 좋은결과 있으시길 바랍니다.
:
: 하늘마루 님이 쓰신 글 :
: : 안녕하세요.
: : cmsMSDS라는 DLL이 있습니다. 이 DLL에서는 메인 폼에 있는 ListView의 핸들을 얻어와서
: : 서브클래싱하여 특정 필드에 체크버튼을 만드는 것을 만들었습니다.
: : 그런데, 체크버튼을 안만들고 InsertItem 등을 하면 잘 나옵니다만, 체크버튼을 만들게 시키면, 먹통이 되어
: : 버리네요. 체크버튼이 안보이는 것은 당연지사입니다.
: :
: : 참... cmsMSDS.DLL은 Worker Thread로 동작하도록 만들고, 소켓으로 들어오는 데이터를 계속 감시하면서
: : 그 데이터를 처리하는 역할을 합니다.
: : 당연히 Thread 루프 내에서 데이터에 따라서 체크버튼을 만들지 안만들지를 결정합니다.
: : 체크버튼을 만들기로 결정하면 제가 ListView를 서브클래싱한 놈에게 체크 박스를 만들도록 하지요.
: :
: : Thread 루프 안에서 체크버튼을 만들도록 시키지 않고, 다른 곳에서 만들도록 하면, 화면에 아주 이쁘게
: : 잘 그려집니다.
: :
: : 도대체 이유가 뭘까요?
|