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

📄 threads.3

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 3
📖 第 1 页 / 共 3 页
字号:
.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05).\".\" Standard preamble:.\" ========================================================================.de Sh \" Subsection heading.br.if t .Sp.ne 5.PP\fB\\$1\fR.PP...de Sp \" Vertical space (when we can't use .PP).if t .sp .5v.if n .sp...de Vb \" Begin verbatim text.ft CW.nf.ne \\$1...de Ve \" End verbatim text.ft R.fi...\" Set up some character translations and predefined strings.  \*(-- will.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left.\" double quote, and \*(R" will give a right double quote.  \*(C+ will.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,.\" nothing in troff, for use with C<>..tr \(*W-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'.ie n \{\.    ds -- \(*W-.    ds PI pi.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch.    ds L" "".    ds R" "".    ds C` "".    ds C' ""'br\}.el\{\.    ds -- \|\(em\|.    ds PI \(*p.    ds L" ``.    ds R" '''br\}.\".\" Escape single quotes in literal strings from groff's Unicode transform..ie \n(.g .ds Aq \(aq.el       .ds Aq '.\".\" If the F register is turned on, we'll generate index entries on stderr for.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index.\" entries marked with X<> in POD.  Of course, you'll have to process the.\" output yourself in some meaningful fashion..ie \nF \{\.    de IX.    tm Index:\\$1\t\\n%\t"\\$2"...    nr % 0.    rr F.\}.el \{\.    de IX...\}.\".\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2)..\" Fear.  Run.  Save yourself.  No user-serviceable parts..    \" fudge factors for nroff and troff.if n \{\.    ds #H 0.    ds #V .8m.    ds #F .3m.    ds #[ \f1.    ds #] \fP.\}.if t \{\.    ds #H ((1u-(\\\\n(.fu%2u))*.13m).    ds #V .6m.    ds #F 0.    ds #[ \&.    ds #] \&.\}.    \" simple accents for nroff and troff.if n \{\.    ds ' \&.    ds ` \&.    ds ^ \&.    ds , \&.    ds ~ ~.    ds /.\}.if t \{\.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u".    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'.\}.    \" troff and (daisy-wheel) nroff accents.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'.ds 8 \h'\*(#H'\(*b\h'-\*(#H'.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#].ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#].ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#].ds ae a\h'-(\w'a'u*4/10)'e.ds Ae A\h'-(\w'A'u*4/10)'E.    \" corrections for vroff.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'.    \" for low resolution devices (crt and lpr).if \n(.H>23 .if \n(.V>19 \\{\.    ds : e.    ds 8 ss.    ds o a.    ds d- d\h'-1'\(ga.    ds D- D\h'-1'\(hy.    ds th \o'bp'.    ds Th \o'LP'.    ds ae ae.    ds Ae AE.\}.rm #[ #] #H #V #F C.\" ========================================================================.\".IX Title "threads 3".TH threads 3 "2007-12-18" "perl v5.10.0" "Perl Programmers Reference Guide".\" For nroff, turn off justification.  Always turn off hyphenation; it makes.\" way too many mistakes in technical documents..if n .ad l.nh.SH "NAME"threads \- Perl interpreter\-based threads.SH "VERSION".IX Header "VERSION"This document describes threads version 1.67.SH "SYNOPSIS".IX Header "SYNOPSIS".Vb 4\&    use threads (\*(Aqyield\*(Aq,\&                 \*(Aqstack_size\*(Aq => 64*4096,\&                 \*(Aqexit\*(Aq => \*(Aqthreads_only\*(Aq,\&                 \*(Aqstringify\*(Aq);\&\&    sub start_thread {\&        my @args = @_;\&        print(\*(AqThread started: \*(Aq, join(\*(Aq \*(Aq, @args), "\en");\&    }\&    my $thr = threads\->create(\*(Aqstart_thread\*(Aq, \*(Aqargument\*(Aq);\&    $thr\->join();\&\&    threads\->create(sub { print("I am a thread\en"); })\->join();\&\&    my $thr2 = async { foreach (@files) { ... } };\&    $thr2\->join();\&    if (my $err = $thr2\->error()) {\&        warn("Thread error: $err\en");\&    }\&\&    # Invoke thread in list context (implicit) so it can return a list\&    my ($thr) = threads\->create(sub { return (qw/a b c/); });\&    # or specify list context explicitly\&    my $thr = threads\->create({\*(Aqcontext\*(Aq => \*(Aqlist\*(Aq},\&                              sub { return (qw/a b c/); });\&    my @results = $thr\->join();\&\&    $thr\->detach();\&\&    # Get a thread\*(Aqs object\&    $thr = threads\->self();\&    $thr = threads\->object($tid);\&\&    # Get a thread\*(Aqs ID\&    $tid = threads\->tid();\&    $tid = $thr\->tid();\&    $tid = "$thr";\&\&    # Give other threads a chance to run\&    threads\->yield();\&    yield();\&\&    # Lists of non\-detached threads\&    my @threads = threads\->list();\&    my $thread_count = threads\->list();\&\&    my @running = threads\->list(threads::running);\&    my @joinable = threads\->list(threads::joinable);\&\&    # Test thread objects\&    if ($thr1 == $thr2) {\&        ...\&    }\&\&    # Manage thread stack size\&    $stack_size = threads\->get_stack_size();\&    $old_size = threads\->set_stack_size(32*4096);\&\&    # Create a thread with a specific context and stack size\&    my $thr = threads\->create({ \*(Aqcontext\*(Aq    => \*(Aqlist\*(Aq,\&                                \*(Aqstack_size\*(Aq => 32*4096,\&                                \*(Aqexit\*(Aq       => \*(Aqthread_only\*(Aq },\&                              \e&foo);\&\&    # Get thread\*(Aqs context\&    my $wantarray = $thr\->wantarray();\&\&    # Check thread\*(Aqs state\&    if ($thr\->is_running()) {\&        sleep(1);\&    }\&    if ($thr\->is_joinable()) {\&        $thr\->join();\&    }\&\&    # Send a signal to a thread\&    $thr\->kill(\*(AqSIGUSR1\*(Aq);\&\&    # Exit a thread\&    threads\->exit();.Ve.SH "DESCRIPTION".IX Header "DESCRIPTION"Perl 5.6 introduced something called interpreter threads.  Interpreter threadsare different from \fI5005threads\fR (the thread model of Perl 5.005) by creatinga new Perl interpreter per thread, and not sharing any data or state betweenthreads by default..PPPrior to Perl 5.8, this has only been available to people embedding Perl, andfor emulating \fIfork()\fR on Windows..PPThe \fIthreads\fR \s-1API\s0 is loosely based on the old Thread.pm \s-1API\s0. It is veryimportant to note that variables are not shared between threads, all variablesare by default thread local.  To use shared variables one must also usethreads::shared:.PP.Vb 2\&    use threads;\&    use threads::shared;.Ve.PPIt is also important to note that you must enable threads by doing \f(CW\*(C`usethreads\*(C'\fR as early as possible in the script itself, and that it is notpossible to enable threading inside an \f(CW\*(C`eval ""\*(C'\fR, \f(CW\*(C`do\*(C'\fR, \f(CW\*(C`require\*(C'\fR, or\&\f(CW\*(C`use\*(C'\fR.  In particular, if you are intending to share variables withthreads::shared, you must \f(CW\*(C`use threads\*(C'\fR before you \f(CW\*(C`use threads::shared\*(C'\fR.(\f(CW\*(C`threads\*(C'\fR will emit a warning if you do it the other way around.).ie n .IP "$thr = threads\->create(\s-1FUNCTION\s0, \s-1ARGS\s0)" 4.el .IP "\f(CW$thr\fR = threads\->create(\s-1FUNCTION\s0, \s-1ARGS\s0)" 4.IX Item "$thr = threads->create(FUNCTION, ARGS)"This will create a new thread that will begin execution with the specifiedentry point function, and give it the \fI\s-1ARGS\s0\fR list as parameters.  It willreturn the corresponding threads object, or \f(CW\*(C`undef\*(C'\fR if thread creation failed..Sp\&\fI\s-1FUNCTION\s0\fR may either be the name of a function, an anonymous subroutine, ora code ref..Sp.Vb 5\&    my $thr = threads\->create(\*(Aqfunc_name\*(Aq, ...);\&        # or\&    my $thr = threads\->create(sub { ... }, ...);\&        # or\&    my $thr = threads\->create(\e&func, ...);.Ve.SpThe \f(CW\*(C`\->new()\*(C'\fR method is an alias for \f(CW\*(C`\->create()\*(C'\fR..ie n .IP "$thr\fR\->\fIjoin()" 4.el .IP "\f(CW$thr\fR\->\fIjoin()\fR" 4.IX Item "$thr->join()"This will wait for the corresponding thread to complete its execution.  Whenthe thread finishes, \f(CW\*(C`\->join()\*(C'\fR will return the return value(s) of theentry point function..SpThe context (void, scalar or list) for the return value(s) for \f(CW\*(C`\->join()\*(C'\fRis determined at the time of thread creation..Sp.Vb 10\&    # Create thread in list context (implicit)\&    my ($thr1) = threads\->create(sub {\&                                    my @results = qw(a b c);\&                                    return (@results);\&                                 });\&    #   or (explicit)\&    my $thr1 = threads\->create({\*(Aqcontext\*(Aq => \*(Aqlist\*(Aq},\&                               sub {\&                                    my @results = qw(a b c);\&                                    return (@results);\&                               });\&    # Retrieve list results from thread\&    my @res1 = $thr1\->join();\&\&    # Create thread in scalar context (implicit)\&    my $thr2 = threads\->create(sub {\&                                    my $result = 42;\&                                    return ($result);\&                                 });\&    # Retrieve scalar result from thread\&    my $res2 = $thr2\->join();\&\&    # Create a thread in void context (explicit)\&    my $thr3 = threads\->create({\*(Aqvoid\*(Aq => 1},\&                               sub { print("Hello, world\en"); });\&    # Join the thread in void context (i.e., no return value)\&    $thr3\->join();.Ve.SpSee \*(L"\s-1THREAD\s0 \s-1CONTEXT\s0\*(R" for more details..SpIf the program exits without all threads having either been joined ordetached, then a warning will be issued..SpCalling \f(CW\*(C`\->join()\*(C'\fR or \f(CW\*(C`\->detach()\*(C'\fR on an already joined thread willcause an error to be thrown..ie n .IP "$thr\fR\->\fIdetach()" 4.el .IP "\f(CW$thr\fR\->\fIdetach()\fR" 4.IX Item "$thr->detach()"Makes the thread unjoinable, and causes any eventual return value to bediscarded.  When the program exits, any detached threads that are stillrunning are silently terminated..SpIf the program exits without all threads having either been joined ordetached, then a warning will be issued..SpCalling \f(CW\*(C`\->join()\*(C'\fR or \f(CW\*(C`\->detach()\*(C'\fR on an already detached threadwill cause an error to be thrown..IP "threads\->\fIdetach()\fR" 4

⌨️ 快捷键说明

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