Các tác động của việc gọi CloseHandle nhiều hơn một lần là gì?Có an toàn khi "đóng đôi" một tay cầm bằng CloseHandle không?
Các tài liệu nói "bạn không nên" nhưng tôi nghĩ rằng tôi có một trường hợp thực tế với các đường ống được đặt tên nơi tay cầm có thể bị đóng bên ngoài (Xem phần cuối của bài đăng).
CloseHandle ném ngoại lệ trong chế độ gỡ lỗi trong trường hợp này, điều này gợi ý cho tôi rằng các nhà phát triển nghĩ rằng điều này là nghiêm trọng, nhưng tài liệu không rõ ràng.
(Yêu cầu lịch sự: Vui lòng tránh câu trả lời "không được!" :-). Tất nhiên người ta nên tránh đóng một handke nhiều hơn một lần, và tất nhiên có những kỹ thuật tốt để giúp với điều này: Tôi chỉ quan tâm đến những gì sẽ xảy ra nếu bạn không).
Tôi đã nghe một số người đề nghị rằng nếu xử lý nhanh chóng được sử dụng lại bởi hệ điều hành, bạn có thể sẽ đóng một lệnh xử lý khác.
Điều này có khả năng không?
Windows chọn ID xử lý như thế nào?
Có bất kỳ sự đảm bảo nào về mức độ thường xuyên mà giá trị xử lý sẽ được sử dụng lại không?
(ví dụ: TCP đảm bảo rằng không thể sử dụng lại số cổng trong một khung thời gian nhất định).
Bạn có thể đóng chốt xử lý các loại xử lý không? Ví dụ: tôi có thể nghĩ rằng tôi đang đóng một đường ống nhưng cuối cùng sẽ đóng một sự kiện?
Cảm ơn!
John
(Bối cảnh thế này:. Tôi sử dụng ống có tên trong một khách hàng mô hình/máy chủ Dường như với tôi rất khó khăn để đảm bảo rằng đúng một bên được đảm bảo để đóng xử lý, ví dụ như trong quá trình sụp đổ/Có lẽ tôi sai, nhưng chắc chắn mã mẫu MSDN có vẻ như trong tâm trí của tôi để cho phép khách hàng đóng xử lý được chia sẻ, và sau đó khi máy chủ cố gắng đóng nó, nó đã bị đóng).
Bạn đang đề cập đến "xử lý được chia sẻ" nào? Mỗi quá trình cần được tạo * và * đóng chốt điều khiển của chính nó vào cùng một đường ống. Làm thế nào để xử lý kết thúc việc chia sẻ? Than ôi, câu trả lời ** là ** "chỉ là không", nhưng đó là bởi vì xử lý không nên được chia sẻ ở tất cả. – shambulator