Tôi đang bắt đầu một chuỗi bằng cách sử dụng AfxBeginThread
. Điều này trả về một con trỏ đến một đối tượng CWinThread
mới.Ai sở hữu CWinThread sau khi được tạo bởi AfxBeginThread?
MSDN tuyên bố rằng con trỏ này là NULL và nó sẽ giải quyết mọi thứ nếu tạo chuỗi không thành công. Tuy nhiên ngay sau khi thoát khỏi chuỗi sau khi bắt đầu thường xuyên, đối tượng CWinThread
vẫn tồn tại. Tôi không chắc chắn nếu tôi nên xóa các đối tượng CWinThread
hoặc nếu điều này được thực hiện bởi MFC chính nó (mặc dù nó không có vẻ như vậy).
FYI không có khả năng thoát khỏi chuỗi, vì nó sẽ chạy cho đến khi ứng dụng kết thúc. Tuy nhiên kể từ khi tôi sử dụng nó là một phần của một hồ bơi thread, tôi không muốn CWinThread
để treo aorund cho bao giờ hết.
Câu trả lời này sai. Khi kết thúc chuỗi, 'CWinThread' sẽ đóng chốt xử lý và xóa chính nó. Do đó mã này có thể gọi là 'WaitForSingleObject' trên một chốt đóng, đó là hành vi không xác định, hoặc nó có thể cố gắng xóa một đối tượng đã bị xóa. Cách tiếp cận đúng là sử dụng 'm_bAutoDelete' trên một chuỗi _suspended_, như được giải thích trong câu trả lời bởi @jla. –