추신 : 나는 스레드에 매우 익숙하다.정의되지 않은 수의 스레드를 생성하고 윈도우의 c에서 WaitForMultipleObjects()를 사용하는 방법
클라이언트에서 연결 요청 (완전히 임의의 횟수)을 기다려야하고 소켓 연결을 수락하고 연결 후 작업자 스레드를 생성해야하는 등의 문제가 있습니다. 그런 다음 생성 된 스레드는 char 배열을 작성하여 작동하고 부모 프로세스에 전달해야합니다.
제가
while ((new_socket = accept(srv_sock, (struct sockaddr *)&client, &c)) != INVALID_SOCKET)
{
puts("\nConnection accepted");
_beginthreadex(0, 0, handle_client, &new_socket, 0, 0);
}
I가 pthread_join()
은 (UNIX)에서 상위 프로세스 스레드로부터 데이터를 전달하는데 사용될 수 있다는 것을 본 같이 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(thread_id,&my_array);
}
편집 : pthread_join().
또는 창에 해당 대안이 있다면 제가 원하는 것은 불가능한 경우, 또는 내가 아는하실 수 있습니다.
편집 : 나는 pthread_join()
이 유닉스 용이고 해당 내용이 WaitForMultipleObjects()
이며 windows에 해당한다고 읽었습니다. 어쨌든 나는 여전히 해결책을 찾을 수 없었습니다.
는이 일의 '윈도우'방법은 내가 IOCP 완료 포트에서 대기하는 추측 것을 클라이언트 연결 수락 (겹쳐진 AcceptEx)과 클라이언트 스레드의 대기중인 메시지 (PostQueuedCompletionStatus) 모두. 양자 택일로, 다른 스레드에서 Accept() 루프를 실행하고 프로듀서 - 소비자 대기열 (아마도 PostMessage, GetMessage)에서 모든 것을 '주 스레드'(또는 모든 것을 관리하려고하는 모든 것)에 큐에 넣습니다. –
TBH, 'join()'은 모든 경우에있어 약간의 PITA이며 가능한 경우 피하려고 노력해야합니다. 스레드가 끝날 때까지 기다릴 필요가 없도록 디자인 할 수 있다면 멀티 스레드 프로그래밍이 훨씬 쉬워지고 많은 고통을 피할 수 있습니다. 스레드의 수를 세는 데 의존하는 모든 디자인에도 동일하게 적용됩니다. 디자인은 중요하지 않으므로 걱정하지 않아도됩니다. –