2009-01-07 24 views
11

Tôi chỉ muốn tạo một chuỗi, sau đó gọi CloseHandle ngay lập tức và để chủ đề tự chết vì vậy tôi không phải thực hiện thêm công việc dọn dẹp trong luồng 'gốc' (không phải dọn dẹp quá khó trong chính nó, nhưng nó có nghĩa là một số tiền hợp lý của cuốn sách bổ sung mà tôi muốn tránh).Có hợp lý khi gọi CloseHandle() trên một chuỗi trước khi nó kết thúc?

MSDN nói rằng gọi CloseHandle() trên một chuỗi không chấm dứt chuỗi, nhưng không rõ ràng cho dù điều đó có nghĩa là tôi thực sự được phép làm điều này hay không.

Trả lời

20

Không chỉ hợp lý, không làm việc đó là rò rỉ xử lý. Nói chung tôi đóng nó ngay lập tức sau khi tạo ra các chủ đề, trừ khi tôi sẽ cần nó ở nơi khác.

+0

+1, bằng cách này bạn sẽ không nhận được các kết quả sai khi bạn sử dụng AppVerifier. –

+1

Điều đó có nghĩa là 'ExitThread()' (được gọi một cách rõ ràng hoặc ngầm) đóng chốt xử lý của luồng trong chuỗi thoát, do đó chỉ thread tạo thread vẫn phải đóng handle (tức là 'CreateThread()' tạo một số xử lý của 2)? – Jori

11

chức năng CreateThread làm cho số tham chiếu +2, CloseHandle chỉ thực hiện số tham chiếu -1, khi hàm chuỗi hoàn thành, hệ thống sẽ tính số tham chiếu -1.

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