⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exit.t

📁 source of perl for linux application,
💻 T
字号:
use strict;use warnings;BEGIN {    if ($ENV{'PERL_CORE'}){        chdir 't';        unshift @INC, '../lib';    }    use Config;    if (! $Config{'useithreads'}) {        print("1..0 # Skip: Perl not compiled with 'useithreads'\n");        exit(0);    }    require($ENV{PERL_CORE} ? "./test.pl" : "./t/test.pl");}our $TODO;use ExtUtils::testlib;use threads;BEGIN {    eval {        require threads::shared;        import threads::shared;    };    if ($@ || ! $threads::shared::threads_shared) {        print("1..0 # Skip: threads::shared not available\n");        exit(0);    }    $| = 1;    print("1..18\n");   ### Number of tests that will be run ###};ok(1, 'Loaded');### Start of Testing ###$SIG{'__WARN__'} = sub {    my $msg = shift;    ok(0, "WARN in main: $msg");};$SIG{'__DIE__'} = sub {    my $msg = shift;    ok(0, "DIE in main: $msg");};my $thr = threads->create(sub {    threads->exit();    return (99);  # Not seen});ok($thr, 'Created: threads->exit()');my $rc = $thr->join();ok(! defined($rc), 'Exited: threads->exit()');run_perl(prog => 'use threads 1.67;' .                 'threads->exit(86);' .                 'exit(99);',         nolib => ($ENV{PERL_CORE}) ? 0 : 1,         switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ]);{    local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';    is($?>>8, 86, 'thread->exit(status) in main');}$thr = threads->create({'exit' => 'thread_only'}, sub {                                                    exit(1);                                                    return (99);  # Not seen                                                  });ok($thr, 'Created: thread_only');$rc = $thr->join();ok(! defined($rc), 'Exited: thread_only');$thr = threads->create(sub {    threads->set_thread_exit_only(1);    exit(1);    return (99);  # Not seen});ok($thr, 'Created: threads->set_thread_exit_only');$rc = $thr->join();ok(! defined($rc), 'Exited: threads->set_thread_exit_only');my $WAIT :shared = 1;$thr = threads->create(sub {    lock($WAIT);    while ($WAIT) {        cond_wait($WAIT);    }    exit(1);    return (99);  # Not seen});threads->yield();ok($thr, 'Created: $thr->set_thread_exit_only');$thr->set_thread_exit_only(1);{    lock($WAIT);    $WAIT = 0;    cond_broadcast($WAIT);}$rc = $thr->join();ok(! defined($rc), 'Exited: $thr->set_thread_exit_only');run_perl(prog => 'use threads 1.67 qw(exit thread_only);' .                 'threads->create(sub { exit(99); })->join();' .                 'exit(86);',         nolib => ($ENV{PERL_CORE}) ? 0 : 1,         switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ]);{    local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';    is($?>>8, 86, "'use threads 'exit' => 'thread_only'");}my $out = run_perl(prog => 'use threads 1.67;' .                           'threads->create(sub {' .                           '    exit(99);' .                           '});' .                           'sleep(1);' .                           'exit(86);',                   nolib => ($ENV{PERL_CORE}) ? 0 : 1,                   switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ],                   stderr => 1);{    local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';    is($?>>8, 99, "exit(status) in thread");}like($out, '1 finished and unjoined', "exit(status) in thread");$out = run_perl(prog => 'use threads 1.67 qw(exit thread_only);' .                        'threads->create(sub {' .                        '   threads->set_thread_exit_only(0);' .                        '   exit(99);' .                        '});' .                        'sleep(1);' .                        'exit(86);',                nolib => ($ENV{PERL_CORE}) ? 0 : 1,                switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ],                stderr => 1);{    local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';    is($?>>8, 99, "set_thread_exit_only(0)");}like($out, '1 finished and unjoined', "set_thread_exit_only(0)");run_perl(prog => 'use threads 1.67;' .                 'threads->create(sub {' .                 '   $SIG{__WARN__} = sub { exit(99); };' .                 '   die();' .                 '})->join();' .                 'exit(86);',         nolib => ($ENV{PERL_CORE}) ? 0 : 1,         switches => ($ENV{PERL_CORE}) ? [] : [ '-Mblib' ]);{    local $TODO = 'VMS exit semantics not like POSIX exit semantics' if $^O eq 'VMS';    is($?>>8, 99, "exit(status) in thread warn handler");}$thr = threads->create(sub {    $SIG{__WARN__} = sub { threads->exit(); };    local $SIG{__DIE__} = 'DEFAULT';    die('Died');});ok($thr, 'Created: threads->exit() in thread warn handler');$rc = $thr->join();ok(! defined($rc), 'Exited: threads->exit() in thread warn handler');# EOF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -