2009-05-01 25 views
11

Tôi đang tạo một lớp chuỗi để đóng gói các phương thức của các cửa sổ. Tôi đang cố gắng tạo một phương thức khiến cho ứng dụng đợi cho đến khi luồng hoàn tất trước khi nó thoát khỏi ứng dụng. Nếu tôi sử dụng một vòng lặp while và cờ boolean, nó hoạt động nhưng rõ ràng nó tăng vọt sử dụng CPU của tôi và nó chỉ là không lý tưởng.Phương thức chờ luồng Windows

Bạn sẽ sử dụng cách nào để chờ hoàn thành chuỗi? (Tôi không thực sự tìm kiếm mã ở đây, chỉ cần khu vực để tìm vào)

Trả lời

27

Sau khi bạn sử dụng CreateThread để có được một xử lý chủ đề, vượt qua nó vào API Win32 WaitForSingleObject:

WaitForSingleObject(threadhandle, INFINITE); 

Nếu bạn không sử dụng CreateThread (bởi vì bạn sử dụng một gói luồng), hoặc có lẽ chủ đề của bạn luôn luôn sống ...

Sau đó, bạn vẫn có thể sử dụng WaitForSingleObject. Chỉ cần tạo một sự kiện trước tiên với API Win32 CreateEvent và đợi sự kiện được đặt bằng WaitForSingleObject. Khi kết thúc chuỗi của bạn, hãy đặt sự kiện với SetEvent và bạn có thể đặt lại sự kiện bằng ResetEvent.

Hầu hết các gói luồng mặc dù sẽ có cách riêng để đợi chuỗi. Giống như trong boost::thread, bạn có thể sử dụng .join() hoặc boost::condition.

+0

Chỉ có vấn đề là tôi muốn sử dụng lại luồng này, vì vậy khi đơn vị công việc (một trình rút gọn) hoàn thành chuỗi bị treo, vì vậy WaitForSingleObject chạy không chính xác –

+2

Ok, sau đó bạn có thể sử dụng phương thức sự kiện mà tôi đã đề cập. –

+0

Ok, cảm ơn, sẽ xem xét điều đó. –

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