2013-09-25 2 views
-1

스레드 (C posix 스레드)를 죽이는 것에 대해 검색하고 읽었습니다. 모든 스레드는 스레드가 작업을하고 돌아와야하기 때문에 좋은 생각이 아니라고 말합니다. 그러나 내 문제는 다음입니다.스레드가 살아 있는지 확인하고 죽일 수 있습니까?

recvfrom 함수를 사용하여 로컬 네트워크에서 메시지를 수신하고 있지만이 함수는 내 프로그램을 "차단"합니다. 재시작을하지 않으면 함수가 잠길 때까지 영원히 잠긴 상태로 유지됩니다.

이 문제를 방지하려면 스레드를 사용한다고 생각 했으므로 주 스레드가 "카운팅"하는 동안 두 번째 스레드는 메시지를 암시하려고합니다. 결정된 시간 (즉, 1 초)에 내 두 번째 스레드가 여전히 메시지를 기다리고 있습니다 (recvfrom 함수에서 잠겨 있습니다). "죽여야"하고 다시 시작할 다른 스레드를 만들어야합니다. 다른 IP). 이것은 항상 내 스레드가 작업을 끝내지 않고 영원히 기다릴 수 없다는 것을 의미합니다 ...

지금까지 내가 할 수있는 일은 많은 스레드를 만들고 관심있는 IP의 메시지를 받아들입니다.),하지만 난 아무것도 recived 결코 스레드를 죽일 줄 몰라 ...

누군가가 스레드를 죽이는 방법을 알고 있습니까? 아니면 내 주요 프로그램이 돌아 오면 자동으로 사망합니까?

(코드 샘플은 C#으로입니다)하지만
+0

[비 차단 소켓] (https://www.google.com/search?q=non+blocking+sockets)을 검색하십시오. –

+0

보다 구체적으로, timeout을 사용하여 select()를 호출하십시오. 그것은 당신의 프로그램이 무엇을하는지 알게하는데 도움을 줄 것입니다. 특히 다른 IP를 왜 병렬로 쓰지 않고 왜 다른 IP를 시도 하는지요. –

답변

0

은, 그와 관련된 내 질문에

How to avoid thread waiting in the following or similar scenarios (want to make a thread wait iff its really really necessary)? 중 하나 그러나 닷넷 것 같은데 ... 감사하고 불쌍한 내 영어에 대한 정말 죄송

기본적으로 새 스레드를 생성하고 일부 I/O 처리 및 차단 호출을 수행합니다.

그리고 어떤 이유에서든 foreve를 기다리고 있기 때문에 시간 초과가 있기 때문에 스레드 '중단'방법을 중단 할 수 있습니다.

0

재 설계자가 스레드가 에서 메시지를받을 수 있도록 IP. 그렇게하면 스레드를 방해하지 않고도 다른 IP에서 메시지를 수신 할 수 있습니다.