您好,登錄后才能下訂單哦!
很無聊。。。隨便寫D代碼 不得不說perl的多線程簡單易懂
加個ajax就好了
use Mojolicious::Lite; use threads; use threads::shared; #請直接使用 ./x.pl daemon 啟動 #morbo啟動,線程不會自動關(guān)閉。要手動關(guān)閉改代碼才行,不然創(chuàng)建的線程仍會執(zhí)行 #當(dāng)然你的線程不是個死循環(huán),使用morbo也是不錯的。線程執(zhí)行完就會自動退出 #當(dāng)然你可以使用其他方式避免線程句柄被重置。 #線程共享變量, my $signal:shared=-1; my $i:shared=0; #線程句柄 my $thr; #接受POST GET都是它。 any '/status' => sub { my $c = shift; #只要模塊里有要使用的,即使是空值都要傳過去,不然在模塊里會報錯。 #Global symbol "$xxx" requires explicit package name $c->stash(status => $signal); $c->stash(i => $i); $c->stash(thr => $thr); #數(shù)據(jù)限制。狀態(tài)設(shè)置,判斷參數(shù)使用字符串判斷是否為空 if ($c->param('signal') ne '' && $c->param('signal') >=-1 && $c->param('signal')<=1) { $signal=$c->param('signal'); $c->stash(status => $signal); undef $thr if $signal == -1 ; $c->stash(thr => $thr); } #根據(jù)傳進(jìn)來的參數(shù)創(chuàng)建線程 if ($c->param('action')) { my $action=$c->param('action'); if ($action eq 'create') { $thr = threads->new(\&ppp,1) unless $thr ; $c->stash(thr => $thr); } } $c->render('status'); }; #線程函數(shù) sub ppp { #接受第一個參數(shù) $signal=shift; #0的時候跟false一樣 while($signal or $signal==0){ #睡一秒鐘 sleep 1; last if $signal == -1; #再睡一秒鐘 sleep 1 if $signal == 0; #print要換行符才會有輸出,不然要等到mojo結(jié)束了才有輸出。 print "running.\t.".$i++."\n" if ($signal == 1 ) } } app->start; __DATA__ @@ status.html.ep % unless ($thr) { no threads creat or threads down bbbba<br> %} else { <meta http-equiv="refresh" content="5"> %} The status Can be exit=-1 stop=0 start=1 <br> The status now is <%= $status %> .i=<%= $i %> .thr=<%= $thr if defined $thr %> %= form_for '/status' => (method => 'POST') => begin %= text_field 'signal' %= submit_button '設(shè)置狀態(tài)' % end %= form_for '/status' => (method => 'POST') => begin %= hidden_field action => 'create' %= submit_button '創(chuàng)建線程' % end
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。