Trong các hoạt động dài hạn, ứng dụng C++ Win32 của chúng tôi hiển thị hộp thoại trạng thái phương thức với thanh tiến trình, được cập nhật bất thường vài giây một lần. Bắt đầu với Windows 7, chúng tôi nhận ra rằng Windows khá sớm hiển thị một thông báo "dường như treo ..." và/hoặc nối thêm "Không phản hồi" vào thanh tiêu đề cửa sổ của chúng tôi.Ứng dụng bận sẽ dẫn đến trạng thái "Không phản hồi" trên Windows 7 - WM_UPDATE
Chúng tôi đã tìm ra rằng hộp thoại xử lý phải xử lý các tin nhắn để tránh điều này. Cụ thể hơn, có vẻ như Windows 7 liên tục gửi tin nhắn WM_UPDATE để kiểm tra xem chương trình của chúng tôi có còn hoạt động hay không. Chúng tôi trước đây đã vô hiệu hóa tất cả các xử lý tin nhắn không cần thiết trong hộp thoại này khi hồ sơ chạy cho thấy rằng họ là một chậm lớn. Tuy nhiên, mặc dù chúng tôi nghĩ rằng đã khắc phục sự cố đó, người dùng vẫn đang báo cáo lại vấn đề như vậy: Windows hiển thị "có vẻ treo ..." và/hoặc nối "Không phản hồi" vào thanh tiêu đề cửa sổ của chúng tôi, mặc dù chúng tôi xử lý mọi sự kiện vài giây.
Câu hỏi:
Có bất kỳ tài liệu về thay đổi hành vi này trong Windows 7 (hoặc Windows vista)? Chúng tôi đã không tìm thấy bất kỳ. Chúng tôi cũng tìm thấy một số thay đổi khác về hành vi nhắn tin.
Có cách nào để vô hiệu hóa tất cả các kiểm tra "còn sống" đó từ cửa sổ không? Ứng dụng của chúng tôi khá tốt và các quá trình có thể mất nhiều thời gian.
EDIT: Để cụ thể hơn - những gì chúng tôi chỉ làm mỗi vài giây đang kêu gọi các máy bơm thông điệp PeekMessage
/TranslateMessage
/DispatchMessage
.
Vì đây là một chương trình cũ khá cũ nên không thể sử dụng chuỗi công nhân riêng trong tương lai gần. Tất nhiên chúng tôi làm điều đó cho mã mới. Xin lưu ý rằng điểm chính của tôi là hành vi này chắc chắn đã thay đổi với Windows vista/Windows 7. Tôi chưa tìm thấy bất kỳ tài liệu nào ở đó.
Điều này phát ra cho một chuỗi công nhân nền. – Deanna
"vô hiệu hóa tất cả ** không cần thiết ** xử lý tin nhắn" - MSDN là khá rõ ràng về chủ đề này: "Nếu [một thủ tục cửa sổ] không xử lý một tin nhắn, nó ** phải ** gửi tin nhắn trở lại hệ thống để xử lý mặc định Quy trình cửa sổ thực hiện điều này bằng cách gọi hàm 'DefWindowProc'." – MSalters
Vui lòng xem Chỉnh sửa của tôi –