Tôi muốn tạo một cửa sổ trên một chuỗi và sau đó chuyển HWND đó sang một trong số bất kỳ chuỗi nào mà nó sẽ thực thi. Chương trình của tôi sẽ có nhiều cửa sổ như vậy. Điều này có thể hoặc là API Win32 không được thiết kế cho điều này?Cửa sổ Win32 có an toàn không?
Trả lời
Không, điều này là không thể. Chủ đề mà một cửa sổ sử dụng cho vòng lặp tin nhắn của nó (những gì bạn gọi là "thực hiện trên") được xác định tại thời điểm cửa sổ được tạo ra. Bạn có thể tạo nhiều chủ đề và bắt đầu các vòng tin nhắn từ chúng (và do đó tạo ra các cửa sổ trên chúng), nhưng điều này thường được coi là nguy hiểm.
Chăm sóc downvoter để bình luận? –
Một số anh chàng đến và downvoted tất cả mọi thứ với một mũi tên xuống trên trang này, tôi đã cố gắng để hoàn tác nó –
Không downvoter ở đây, nhưng tôi muốn biết: Làm thế nào/tại sao sử dụng nhiều chủ đề GUI 'nguy hiểm'? Nó có lẽ là một thực hành tiên tiến - không phải cái gì bạn cần phải làm trong một Hello World trung bình hoặc ứng dụng hộp thoại đơn giản, nhưng không nguy hiểm mà tôi biết. Đó là thực tế phổ biến trong nhiều ứng dụng phức tạp (Explorer, IE, có khả năng văn phòng quá). – BrendanMcK
Không, không có kiểm tra đồng thời về các cuộc gọi đó.
Có, ở một mức độ nhất định.
Bạn có thể gửi và đăng tin nhắn tới HWND từ bất kỳ chuỗi nào.
http://msdn.microsoft.com/en-us/library/ms644944(v=VS.85).aspx
Cố gắng để cấu hình giao diện người dùng (ví dụ: thêm điều khiển) từ thread khác sẽ kết thúc tồi tệ. Tuy nhiên, nếu bạn gửi tin nhắn cửa sổ, bạn có thể chắc chắn rằng thông báo sẽ được xử lý trên chuỗi tạo.
Đây là câu trả lời đúng nhất - Win32 thực sự là người khoan dung nhất trong các khung công tác giao diện người dùng liên quan đến truy cập chéo, win32k.sys cố gắng làm mọi thứ hoạt động. Tuy nhiên, nó vẫn là một ý tưởng tốt hơn để giả vờ bạn không biết điều này, và hoạt động như thể các đối tượng là chủ đề được tạo ra –
Có. "Chủ yếu là hoạt động" không phải là một mô tả tôi muốn có liên quan đến bất cứ điều gì mà tôi viết :). Dường như nếu bạn không thực sự nghiêm ngặt về Gửi/Đăng tin nhắn (hoặc các đối tác thế kỷ 21 của họ) những thứ kỳ lạ đôi khi chỉ xảy ra. –
Đây là câu trả lời tốt hơn, bởi vì gửi tin nhắn là những gì tôi quan tâm. –
Có hai cuộc gọi quan trọng là must be called from the same thread: CreateWindow
và GetMessage
(hoặc tương đương tương ứng). Giải pháp của bạn sẽ không, vì vậy nó sai.
Bạn có thể gọi PostMessage
trong bất kỳ chủ đề nào. SendMessage
có phần nguy hiểm vì nó chặn trong kịch bản chuỗi chéo và có thể bế tắc.
Tôi đã có một tình huống ngày hôm nay, nơi một số mã trên một chuỗi công nhân được gọi là SendMessage từ một phần quan trọng và bế tắc. Đã lãng phí một giờ nhìn vào nó, tôi nghĩ rằng nó thận trọng hơn để chỉ cần đặt chế biến vào thread UI và PostMessage hướng dẫn của tôi trên. – locka
- 1. Chủ đề của Win32 Registry có an toàn không?
- 2. WIN32, C++: Có thể tạo hiệu ứng động một cửa sổ mà không ẩn nó không?
- 3. Tôi có nên trộn lẫn mã an toàn với mã không an toàn của mình không?
- 4. Cửa sổ Win32 Chủ sở hữu so với cửa sổ Phụ huynh?
- 5. Mảng an toàn không có khóa an toàn
- 6. Chuỗi an toàn của Netty Channel.write có an toàn không?
- 7. Có an toàn khi sử dụng sys.platform == 'win32' kiểm tra trên Python 64 bit không?
- 8. Có LoadLibrary, FreeLibrary và GetModuleHandle Win32 chức năng chủ đề an toàn không?
- 9. Cách đặt cửa sổ Win32 làm chủ sở hữu cửa sổ WPF?
- 10. Win32 lập trình ẩn giao diện điều khiển cửa sổ
- 11. Win32: Mang theo một cửa sổ để đầu
- 12. FormsAuthentication: Có an toàn không?
- 13. SecureString có an toàn không?
- 14. Luồng có an toàn không?
- 15. TempData: Có an toàn không?
- 16. DWScript có an toàn không?
- 17. Cách tạo nhiều cửa sổ bằng Win32 API
- 18. C socket API có an toàn không?
- 19. Mã an toàn và không an toàn
- 20. Tạo cửa sổ phương thức win32 với CreateWindow
- 21. JOptionPane Có hoặc Không có cửa sổ
- 22. Chủ đề NSPersistentStoreCoordinator có an toàn không?
- 23. Làm cách nào để hủy an toàn cửa sổ hộp thoại của ứng dụng wxPython?
- 24. Không có cửa sổ OpenGL
- 25. GLFW Toggling Chế độ toàn màn hình có cửa sổ
- 26. Chuyển động cửa sổ chặn toàn cầu
- 27. cửa sổ wpf hoàn toàn đen
- 28. Phím nóng toàn cầu với WIN32 API?
- 29. X11 Cửa sổ toàn màn hình (OpenGL)
- 30. Xcode có cửa sổ xem không?
Vì vậy, bạn muốn tạo nội dung nào đó trên một chuỗi và sau đó xóa nó trên một chuỗi khác và bạn không thấy vấn đề với ý tưởng đó? – AJG85
@AJG: Không có vấn đề gì với 'new' /' delete'. Hoàn toàn hợp lý để tự hỏi về các tài nguyên khác. – MSalters
@MSalters: Phụ thuộc vào việc triển khai nhưng không có đề cập đến phân bổ đống. Chỉ cần đưa nó lên trong trường hợp nó bị bỏ qua. – AJG85