2012-02-28 26 views
7

Tôi muốn cóCó an toàn khi sử dụng SHFileOperation trong một chuỗi công nhân không?

  • chủ đề một nền đó sẽ sao chép các tập tin thông qua các SHFileOperation chức năng, luôn luôn chỉ có một SHFileOperation vào thời điểm đó (nhưng tôi muốn nó được trong thread)
  • tôi cần đầu ra giao diện người dùng, vì vậy tôi cần phải sử dụng FOF_SIMPLEPROGRESS cờ và vượt qua một cái gì đó để các thành viên Wnd

tôi có hai câu hỏi

  1. có an toàn không khi gọi số SHFileOperation với cờ FOF_SIMPLEPROGRESS (đối với tương tác người dùng) từ chuỗi không phải chính?
  2. nếu có, tôi phải chuyển khoản nào vào thành viên Wnd? Tôi đã thử xử lý của biểu mẫu chính, nhưng ví dụ: hộp thoại xác nhận ghi đè bật lên và bạn xác nhận nó, hình thức chính được gửi đến phía sau, những gì thực sự là lạ

Lưu ý: Tôi có một hàng đợi cho các hoạt động này, vì vậy chỉ có một SHFileOperation được thực hiện vào thời điểm đó (sau khi nó được hoàn thành, thread tiếp tục các hành động khác, những gì có thể tiếp theo SHFileOperation)

Thanks a lot

Trả lời

6
  1. nó hoàn toàn an toàn để gọi SHFileOperation từ một thread khác với các chủ đề chính.
  2. Tôi sẽ vượt qua 0 làm thành viên hwnd. Nếu bạn vượt qua các xử lý của cửa sổ chính sau đó tôi hy vọng rằng cửa sổ sẽ bị vô hiệu hóa vì SHFileOperation là một hộp thoại phương thức. Vì hộp thoại xác nhận tệp và tiến trình là giao diện người dùng cấp cao nhất cho chuỗi nền, bạn không muốn bất kỳ cửa sổ nào bị tắt khi các hộp thoại phương thức hiển thị.
+0

Thật tuyệt khi nghe điều này. Thành viên 'Wnd' được đặt thành 0 hoạt động hoàn hảo. Cảm ơn rất nhiều! –

+0

Ngoài ra, tài liệu cũng đề cập rằng việc sử dụng đường dẫn tương đối với SHFILEOPSTRUCT là NOT thread an toàn. Vì vậy, nếu bạn sử dụng điều này trong một chủ đề công nhân, bạn phải sử dụng đường dẫn tuyệt đối! – 8bitwide

+0

@ 8bitwide Sử dụng đường dẫn tương đối không bao giờ là chủ đề an toàn. Không cho bất kỳ cuộc gọi API nào. Đó là bởi vì có một thư mục làm việc cho mỗi quá trình. –

Các vấn đề liên quan