PS:我對線程很陌生。如何創建未定義數量的線程並在窗口c上使用WaitForMultipleObjects()
我有一個問題,我需要等待來自客戶端的連接請求(完全任意的次數),接受套接字上的連接,連接後創建工作線程。創建的線程然後創建一個char數組,在其上工作並需要將其傳遞給父進程。
我已經能夠創建在while循環的螺紋等
while ((new_socket = accept(srv_sock, (struct sockaddr *)&client, &c)) != INVALID_SOCKET)
{
puts("\nConnection accepted");
_beginthreadex(0, 0, handle_client, &new_socket, 0, 0);
}
我已經看到,pthread_join()
可用於從線程父進程(在UNIX中)傳遞數據。我的問題是,我如何將它整合到主流程的循環中。 我希望採用以下方法將導致客戶端和服務器之間每次只能建立一個以上的連接,這是不需要的。
while ((new_socket = accept(srv_sock, (struct sockaddr *)&client, &c)) != INVALID_SOCKET)
{
puts("\nConnection accepted");
_beginthreadex(0, 0, handle_client, &new_socket, 0, 0);
pthread_join(thread_id,&my_array);
}
編輯:我會很高興知道如果我想是不可能的或者有替代pthread_join().
或其等價物的窗戶。
編輯:我知道pthread_join()
是Unix的,並且已經讀了WaitForMultipleObjects()
是它的等效窗口。無論如何,我仍然無法找出解決方案。
在這樣的「窗口」的方法是,我想,等一個IOCP完成端口對於客戶端連接接受,(重疊的AcceptEx)以及來自客戶端線程的排隊消息(PostQueuedCompletionStatus)。或者,在一個不同的線程中運行Accept()循環,並在生產者 - 消費者隊列(可能是PostMessage,GetMessage)中將所有內容排隊到你的'主線程'(或任何將要管理它的任何東西)。 –
TBH,'join()'在所有情況下都是PITA的一部分,如果可以的話,你應該儘量避免它。如果您可以設計以便不必等待線程完成,那麼您將有更簡單的多線程編程時間並避免很多痛苦。任何依靠計算線程數量的設計都是一樣的 - 設計無所謂,並避免麻煩。 –