타이머를 사용해 보셨습니까? DoDragDrop()
과 같은 문제가 발생하여 SHFileOperation()
과 같은 다른 차단 호출이 발생하고 SetTimer()
으로 전화하여 해결했습니다.
편집 : DoDragDrop()
이상의 제어를 원하면 작업자 스레드가 잘 작동합니다. 누군가 제안한대로 DoDragDrop()
을 작업자 스레드에서 호출 해 볼 수는 있지만 제대로 캡처하려면 마우스 캡처를 가져올 수 없습니다. 보다 쉬운 해결책은 메인 스레드에서 DoDragDrop()
으로 호출하여 작업자 스레드가 주기적으로 WM_USER
메시지를 메인 스레드의 큐에 게시하도록하는 것입니다. DoDragDrop()
은 메시지를 검색하여 창 WndProc()
으로 보내면 대기열이 비어있는 동안 유휴 처리를 수행 할 수 있습니다. 작업자 스레드에 주 스레드보다 낮은 우선 순위를 부여하면 주 스레드가 유휴 상태가되는 즉시 (즉, DoDragDrop()
이 모든 사용자 입력을 처리하고 내부적으로 MsgWaitForMultipleObjects()를 호출하는 즉시 WM_USER
메시지를 실행하고 게시합니다) . 이 방법은 응용 프로그램이 CPU를 완벽하게 제어 할 수 있기 때문에 SetTimer()
메서드보다 좋습니다. 다음 WM_TIMER
메시지가 도착하기 전에 WM_TIMER
처리기에서 돌아온 후 최대 10ms (최소 주파수는 SetTimer()
)까지 기다릴 필요가 없습니다.
위대한 질문입니다. NET에 대한 답변이 있지만 Win32에는 대한 답변이 없습니다. : –