Threading с PERL в Ирсси

Модуль потока для PERL, похоже, не работает с Irssi. Я не могу получить больше информации об этом, потому что люди в #Irssi никогда не отвечают.

Мне нужно, чтобы скрипт проверял базу данных каждые 5 минут. Теперь я думал, что это будет возможно с многопоточностью в PERL, но как только вы включите модуль, Irssi выдаст исключение.

По иронии судьбы, если я попытаюсь создать цикл while, который завершится через определенное время, клиент Irssi просто зависнет.

Какие-либо предложения?

Код

    use strict;
    use warnings;
    use threads;
    use Thread::Queue;

my $q = Thread::Queue->new();    # A new empty queue
    # Worker thread
    my $thr = threads->create(
        sub {
            # Thread will loop until no more work
            while (defined(my $item = $q->dequeue())) {
                # Do work on $item
            }
        }
    );

Ошибки в Irssi (не все, но то же самое, не могу найти пакет):

13:30| Can't locate package Irssi::ServerSetup for
          @Irssi::Irc::ServerSetup::ISA at
          /home/nullby7e/.irssi/scripts/test.pl line 27.
13:30|
13:30| Can't locate package Irssi::Nick for @Irssi::Irc::Nick::ISA at
          /home/nullby7e/.irssi/scripts/test.pl line 27.
13:30|
13:30| Can't locate package Irssi::ServerConnect for
          @Irssi::Irc::ServerConnect::ISA at
          /home/nullby7e/.irssi/scripts/test.pl line 27.

1 ответ

Я не могу помочь вам с темами, но в соответствии с Irssi Perl Scripting Reference вы хотите Irssi::timeout_add функция.

Вы можете найти много примеров, как использовать его в хранилище скриптов Irssi. Основное использование:

use Irssi;

sub check_database {
    ...
}

Irssi::timeout_add(5*60*1000, "check_database", undef);
Другие вопросы по тегам