Trong chương trình của tôi có một luồng (chuỗi nhận) chịu trách nhiệm nhận yêu cầu từ một cổng TCP và có nhiều luồng (chuỗi công việc) chịu trách nhiệm xử lý nhận yêu cầu. Khi yêu cầu được xử lý, tôi cần gửi câu trả lời qua TCP.Làm thế nào để hủy chờ trong select() trên Windows
Và đây là một câu hỏi. Tôi muốn gửi dữ liệu TCP trong cùng một luồng mà tôi sử dụng để nhận dữ liệu. Chủ đề này sau khi nhận dữ liệu thường đợi dữ liệu mới trong select()
. Vì vậy, một khi một thread công nhân xử lý xong một yêu cầu và đặt một câu trả lời trong hàng đợi đầu ra, nó phải báo hiệu luồng nhận rằng có dữ liệu để gửi. Vấn đề là tôi không biết làm thế nào để hủy bỏ chờ đợi trong select()
để có được ra khỏi chờ đợi và gọi send()
.
Hoặc tôi có nên sử dụng một luồng khác chỉ để gửi dữ liệu qua TCP không?
Cập nhật
MSalters, Artyom cảm ơn bạn cho bạn câu trả lời!
Biến đổi, đã đọc câu trả lời của bạn Tôi tìm thấy trang web này: Winsock 2 I/O Methods và đọc khoảng WSAWaitForMultipleEvents()
. Chương trình của tôi trong thực tế phải làm việc cả trên HP-UX và Windows cuối cùng tôi đã quyết định sử dụng cách tiếp cận đã được đề xuất bởi Artyom.
Tại sao bạn sử dụng 'select()' để viết? Thông thường, 'select()' chỉ đợi dữ liệu nhận được, và bạn có thể gửi dữ liệu 'send()' bằng cùng một socket (s) trong khi đó. – ereOn
Không, tôi không sử dụng chọn để viết. Tôi đã nói vậy sao? –
@skwllsp: Tôi giả sử nó vì bạn dường như muốn hủy 'select()' để ghi vào ổ cắm của bạn, điều này không cần thiết. Nhưng có lẽ tôi hiểu lầm toàn bộ điều đó, tiếng anh của tôi không chính xác là bản địa. – ereOn