Có một vài điều bạn có thể làm.
(1) Bạn có thể bài hộp thoại nhắn từ bên trong CDialog :: OnInitDialog phương pháp và sau đó xử lý các chức năng lâu trong xử lý thông điệp rằng thông điệp được đăng. Bằng cách đó, hộp thoại đầu tiên sẽ được hiển thị và sau đó chức năng dài sẽ chạy.
(2) Tùy chọn thứ hai là đảm bảo vòng lặp tin nhắn nhận được một số thời gian xử lý. Vì vậy, nếu chức năng dài của bạn là một số loại vòng lặp chỉ cần thêm các cuộc gọi thường xuyên để các ProcessMessages để đảm bảo hàng đợi thông điệp được giữ trống:
void ProcessMessages()
{
MSG msg;
CWinApp* pApp = AfxGetApp();
while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
pApp->PumpMessage();
}
}
Edit: Nó chắc chắn là có thể sử dụng đề là như vậy một tình huống, nhưng làm như vậy không phải lúc nào cũng không có rủi ro và phức tạp.
Sử dụng đề với một giao diện phương tiện phải đối phó với nhiều hàng đợi thông điệp mà sau đó có nghĩa là sử dụng của API như PostThreadMessage và giới thiệu một bộ mới của vấn đề cần được cảnh giác.
Đối với một ví dụ về một vấn đề như tham khảo liên kết này:
http://msdn.microsoft.com/en-us/library/ms644946(VS.85).aspx
đâu nói:
Tin nhắn được gửi bởi PostThreadMessage là không liên quan đến một cửa sổ. Theo quy tắc chung là , các thư không phải là được liên kết với một cửa sổ không được là được gửi bởi hàm DispatchMessage . Do đó, nếu người nhận luồng đang trong một vòng lặp phương thức (được sử dụng bởi Hộp thư hoặc Hộp thoại), các thông báo sẽ bị mất. Để chặn thư chủ đề trong khi ở chế độ phương thức, hãy sử dụng móc cụ thể theo chủ đề.
Tôi sử dụng phương pháp thông báo quá trình trong Zeus IDE và hoạt động rất tốt tại đảm bảo GUI vẫn đáp ứng với người dùng. Nó cũng có lợi thế là rất dễ thực hiện.
IMO Hàm ProcessMessage() là cách thêm phản hồi vào ứng dụng MFC. – Hapkido
Tôi cũng sẽ sử dụng tùy chọn ProcessMessage;) – jussij
Tôi rất không đồng ý. 1) Một phương thức giao diện người dùng không nên thực hiện nhiều tác phẩm "khác", các mối quan ngại phải được tách riêng. 2) Một chuỗi công nhân đơn giản có thể được sử dụng trong hầu hết các tình huống này, không cần nhiều bơm. Tại sao bạn đang cố gắng để scare OP đi từ chủ đề? –