Perl -Win32- 다른 프로세스에서 파일 핸들을 비 블로킹하는 방법은 무엇입니까?
-
02-07-2019 - |
문제
Stdin을 통해 클라이언트 프로세스와 대화하는 서버 코드를 작성하고 있습니다. 나는 클라이언트의 stdout으로부터 응답을 비동기로받는 Perl 코드 스 니펫을 작성하려고합니다. 코드의 차단 버전은 다음과 같습니다.
sub _read_from_client
{
my ($file_handle) = @_;
while (my $line = <$file_handle>) {
print STDOUT $line;
}
return;
}
중요한 것은 스 니펫이 Win32 플랫폼에서 작동해야합니다. 관심이없는 *닉스 플랫폼에 대한 많은 솔루션이 있습니다. ActivePerl 5.10을 사용하고 있습니다.
다른 팁
저수준 경로로 가고 싶지 않다면 다른 프레임 워크 솔루션을 살펴 봐야합니다.
당신은 a를 사용할 수 있습니다 실 입력에서 읽고 모든 데이터를 글타래 (쓰레드) :: 대기열 그런 다음 메인 스레드에서 처리합니다.
당신은 볼 수 있습니다 포 특히 이벤트 기반 프레임 워크를 구현합니다 poe :: 휠 :: run :: win32. 잠재적으로, 당신은 또한 코드를 훔쳐서 비 차단 읽기를 구현할 수 있습니다.
Coroutines를 사용하여 협력적인 멀티 태스킹 시스템을 구현하는 [Coro]를 볼 수 있습니다. 이것은 시스템 스레드가 아닌 사용자 공간 스레드를 얻는 것을 제외하고는 스레드와 유사합니다.
당신은 얼마나 멀리 가고 싶은지 말하지 않았지만 당신의 선택은 sysread
그리고 프레임 워크 또는 글을 쓴 프레임 워크 직접. 가장 쉬운 경로는 스레드를 사용하거나 코드를 통과하는 것입니다. Poe::Wheel::Run::Win32
.
제휴하지 않습니다 StackOverflow