현재 멀티 쓰레드 델파이 6 프로 어플리케이션을 사용하고 있습니다. 주 스레드 (VCL 스레드)의 컨텍스트에서 실행되는 코드에 중단 점을 설정하면 아무런 문제가 없습니다. 그러나 중단 점이 다른 스레드 중 하나의 코드에서 트리거되면 중단 점에서 응용 프로그램을 계속 한 후에 주 양식 (주 양식 포함)의 VCL 구성 요소에 대한 모든 다시 페인팅이 더 이상 발생하지 않습니다. 다른 배경 코드가 계속 실행되기 때문에 응용 프로그램은 죽지 않습니다. 단지 주 스레드입니다. 이는 Windows 메시지 디스패처가 손상되었거나 휴면 상태로 렌더링 된 것과 같습니다.델파이 6 : non-VCL 쓰레드 멈춤에서 멈춘 breakpoint 메인 쓰레드 다시 칠함
참고 :이 응용 프로그램에서는 등록 된 특정 메시지를 catch해야하기 때문에이 응용 프로그램에서는 주 양식에 allocateHwnd()를 통해 내 WndProc()를 할당합니다. 해당 WndProc()에서 처리하는 모든 사용자 지정 메시지를 디스패치하고 현재 메시지가 내 코드에 의해 처리되지 않으면 기본 폼의 상속 된 WndProc()를 호출하여 메시지를 전달합니다. 현재 메시지를 처리하면 Msg.Result가 1로 설정된 WndProc()에서 반환되어 메시지가 처리되었음을 디스패처에 알립니다. Delphi VCL이 Windows API RegisterWindowMessage() 호출로 인스턴스화 된 등록 된 메시지를 통과하지 못하기 때문에 단순히 WndProc()을 할당하는 대신 TForm WndProc()을 재정의 할 수 없습니다.
아무도 비슷한 맥락에서 이것을 경험 한 사람이 있습니까? 그렇다면 그것을 수정하기 위해 무엇을 했습니까?
- roscherl 당신은 당신이 다른 창을 을 만들었습니다 즉,AllocateHWnd
를 호출하기 때문에
재정의 된 WndProc에서 Windows 메시지를 처리하는 데 문제가 발생하지 않았습니다. 어쩌면 코드 샘플이 잘못되었는지 확인하는 데 도움이 될 것입니다. – kludg
내 생각은 창을 실제로 덮어서 숨기지 않고 창을 새로 고치는 것이 아닌지 확인하는 것입니다. 윈도우가 업데이트가 필요하다는 것을 모를 수도 있습니다. – mj2008
수정 사항이 아니지만 업데이트/페인트/새로 고침을 수행하면 어떻게됩니까? –