multithreading - 在 Irssi 中使用 PERL 进行线程化

标签 multithreading perl irssi

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.

最佳答案

我不能帮你处理线程,但根据 Irssi Perl Scripting Reference你想要 Irssi::timeout_add功能。

您可以在 Irssi's Script Repository 找到许多如何使用它的示例。 .基本用法是:

use Irssi;

sub check_database {
    ...
}

Irssi::timeout_add(5*60*1000, "check_database", undef);

关于multithreading - 在 Irssi 中使用 PERL 进行线程化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24834680/

相关文章:

perl - 我是否必须释放用 newHV 创建的 HV*?

irc - 如何使用irssi将彩色文本写入irc channel

shell - 将 irssi 的输出重定向到文件

java - 排队线程

multithreading - 如何获得唯一的线程标识符?

java - 如何使用多线程打印序列中的数字

irc - 自动加入irssi中所有当前打开的 channel

java - 如何多次重用一个线程?

perl - 使用 Type::Tiny 将类型参数化为另一种类型

regex - 如何在 Perl 中打印与模式匹配的行?