首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Irssi中使用PERL进行线程处理

在Irssi中使用PERL进行线程处理
EN

Stack Overflow用户
提问于 2014-07-19 06:25:29
回答 1查看 434关注 0票数 4

PERL的线程模块似乎不能与Irssi一起工作。我不能得到更多关于这方面的信息,因为#Irssi的人从来没有回应过。

我需要让脚本每5分钟检查一次数据库。现在,我认为在PERL中使用多线程可以做到这一点,但是一旦包含了模块,Irssi就会抛出异常。

具有讽刺意味的是,如果我尝试构建一个while循环,该循环在一段时间后自行终止,Irssi客户端就会挂起。

有什么建议吗?

代码

代码语言:javascript
复制
    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中的错误(不是所有错误,但都是一样的,找不到包):

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

发布于 2014-08-28 14:14:31

我不能帮助你处理线程,但是根据Irssi Perl Scripting Reference的说法,你需要Irssi::timeout_add函数。

你可以在Irssi's Script Repository上找到很多如何使用它的例子。基本用法是:

代码语言:javascript
复制
use Irssi;

sub check_database {
    ...
}

Irssi::timeout_add(5*60*1000, "check_database", undef);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24834680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档