Пока цикл и усле - PullRequest
       40

Пока цикл и усле

0 голосов
/ 20 апреля 2011

Вот фрагмент кода моего демона:

package somepackage;

use Proc::Daemon;
use Time::HiRes qw/usleep/;
use constant{
  LOGFILE => '/var/log/.../work.log'
};

our $LOG;

unless($pid)
  {
  open($LOG,'>>'.LOGFILE);
  my $tm;
  }

while ($pid == 0)
  {

  $tm=usleep(999940); #to be more accurate, 1 sec
  print $somepackage::LOG $tm."\n";

  }

, но проблема в том, что иногда печать записывает в файл только после, скажем, 10 секунд.Я знаю, почему это происходит, потому что цикл не ждет, пока print пишет в файл, вместо этого он переходит на новый цикл и затем спит.Как я могу ждать, пока print завершит запись в файл и затем перейдет к следующей итерации?

1 Ответ

2 голосов
/ 20 апреля 2011

Я думаю, вы говорите о флеше.
Позвоните $LOG->autoflush(1) один раз, сразу после открытия журнала.
(Возможно, вам также понадобится добавить use IO::Handle).

...