Test2::IPC::Driver - Test2 IPC 驱动程序的基类。
package Test2::IPC::Driver::MyDriver;
use base 'Test2::IPC::Driver';
...
如果 IPC 遇到致命错误,它应该使用此方法。 这将把消息打印到 STDERR,并在其前面加上 'IPC Fatal Error: '
,然后强制退出 255。 IPC 错误可能发生在主线程或进程之外的线程或进程中,此方法提供了让测试程序注意到错误的最佳机会。
这与 $ipc->abort($msg)
相同,只是它使用 Carp::longmess
在消息中添加堆栈跟踪。
Test2::IPC::Driver 有一个 import()
方法。所有驱动程序都继承了这个导入方法。这个导入方法注册驱动程序。
在大多数情况下,您只需要加载所需的 IPC 驱动程序即可使其工作。您应该尽早加载此驱动程序。如果您加载得太晚而无法生效,则会发出警告。
use Test2::IPC::Driver::MyDriver;
...
package Test2::IPC::Driver::MyDriver;
use strict;
use warnings;
use base 'Test2::IPC::Driver';
sub is_viable {
return 0 if $^O eq 'win32'; # Will not work on windows.
return 1;
}
sub add_hub {
my $self = shift;
my ($hid) = @_;
... # Make it possible to contact the hub
}
sub drop_hub {
my $self = shift;
my ($hid) = @_;
... # Nothing should try to reach the hub anymore.
}
sub send {
my $self = shift;
my ($hid, $e, $global) = @_;
... # Send the event to the proper hub.
# This may notify other procs/threads that there is a pending event.
Test2::API::test2_ipc_set_pending($uniq_val);
}
sub cull {
my $self = shift;
my ($hid) = @_;
my @events = ...; # Here is where you get the events for the hub
return @events;
}
sub waiting {
my $self = shift;
... # Notify all listening procs and threads that the main
... # process/thread is waiting for them to finish.
}
1;
如果驱动程序在当前环境中有效,则应返回 true。如果无效,则应返回 false。这是一个类方法。
这用于提醒驱动程序一个新的集线器正在等待事件。驱动程序应跟踪进程和线程 ID,集线器只能由启动它的进程+线程删除。
sub add_hub {
my $self = shift;
my ($hid) = @_;
... # Make it possible to contact the hub
}
这用于提醒驱动程序集线器不再接受事件。驱动程序应跟踪进程和线程 ID,集线器只能由启动它的进程+线程删除(这是驱动程序强制执行的责任)。
sub drop_hub {
my $self = shift;
my ($hid) = @_;
... # Nothing should try to reach the hub anymore.
}
用于从当前进程/线程向其进程+线程中的指定集线器发送事件。
sub send {
my $self = shift;
my ($hid, $e) = @_;
... # Send the event to the proper hub.
# This may notify other procs/threads that there is a pending event.
Test2::API::test2_ipc_set_pending($uniq_val);
}
如果 $global
为 true,则驱动程序应将事件发送到所有进程和线程中的所有集线器。
用于收集已发送到指定集线器的事件。
sub cull {
my $self = shift;
my ($hid) = @_;
my @events = ...; # Here is where you get the events for the hub
return @events;
}
当父进程完成并等待所有子进程和线程完成时,将在父进程中调用此方法。
sub waiting {
my $self = shift;
... # Notify all listening procs and threads that the main
... # process/thread is waiting for them to finish.
}
这是一个由 Test2::IPC::Driver->abort()
调用的钩子。这是您在发生中止时进行清理的机会。您无法阻止中止,但可以优雅地接受它。
Test2 的源代码仓库位于 http://github.com/Test-More/test-more/。
版权所有 2020 Chad Granum <[email protected]>。
本程序是自由软件;您可以根据与 Perl 本身相同的条款重新发布和/或修改它。
参见 https://dev.perl5.cn/licenses/