이 result
과 같을 때까지 info
이 백그라운드에서 실행되도록하려면 어떻게 다시 작성할 수 있습니까?조건이 될 때까지 백그라운드에서 서브 루틴을 실행하십시오.
#!/usr/bin/env perl
use 5.12.0;
use warnings;
use Term::ReadLine;
my $term = Term::ReadLine->new('something');
$term->ornaments(0);
sub info {
# in the real script this runs some computations instead of the sleep
# and returns some information.
my ($time) = @_;
sleep $time;
return $time * 2;
}
my $value_returned_by_info = info(10); # run this in the background
my $aw;
$aw = $term->readline('User input: ');
if ($aw eq 'result') {
# if info() is still running in the background:
# wait until info() returns because "$value_returned_by_info" is needed.
say $value_returned_by_info;
}
else {
# if info() is still running in the background:
# let info() in the background because "$value_returned_by_info" is not needed here.
say $aw;
}
$aw = $term->readline('User input: ');
if ($aw eq 'result') {
# if info() is still running in the background:
# wait until info() returns because "$value_returned_by_info" is needed.
say $value_returned_by_info;
}
else {
# if info() is still running in the background:
# let info() in the background because "$value_returned_by_info" is not needed here.
say $aw;
}
$aw = $term->readline('User input: ');
if ($aw eq 'result') {
# if info() is still running in the background:
# wait until info() returns because "$value_returned_by_info" is needed.
say $value_returned_by_info;
}
else {
# if info() is still running in the background:
# let info() in the background because "$value_returned_by_info" is not needed here.
say $aw;
}
say "End";
우리는 메인 프로그램과 상호 작용하는 방법을 당신이 할 수있는'info'을 원하고 무엇에 대한 자세한 정보가 필요. 'info'의'sleep'은 정말로 잠이 들었습니까? 아니면'info'가 주 프로그램과 동시에하고있는 작업을 표현할 수 있습니까? 'info '를 별도의 프로세스에서 실행할 수 있습니까, 아니면'readline' 호출이 실행되는 프로세스와 동일한 프로세스에서 실행해야합니까? 또한,'info'가 값을 반환하기 전에 주 프로그램이'$ result'의 값을 요구하면 어떻게 될까요? 메인 프로그램이 차단되었거나'$ result' 만'undef' 또는 이전 값입니까? – ErikR
수면을 표현하는 것이 있습니다. 정보가 반환되기 전에 주 프로그램이 $ result의 값을 요구하면 정보가 값을 반환 할 때까지 기다려야합니다. –