您好,登錄后才能下訂單哦!
很無聊。。。隨便寫D代碼 不得不說perl的多線程簡單易懂
加個ajax就好了
use Mojolicious::Lite; use threads; use threads::shared; #請直接使用 ./x.pl daemon 啟動 #morbo啟動,線程不會自動關閉。要手動關閉改代碼才行,不然創建的線程仍會執行 #當然你的線程不是個死循環,使用morbo也是不錯的。線程執行完就會自動退出 #當然你可以使用其他方式避免線程句柄被重置。 #線程共享變量, 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); #數據限制。狀態設置,判斷參數使用字符串判斷是否為空 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); } #根據傳進來的參數創建線程 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'); }; #線程函數 sub ppp { #接受第一個參數 $signal=shift; #0的時候跟false一樣 while($signal or $signal==0){ #睡一秒鐘 sleep 1; last if $signal == -1; #再睡一秒鐘 sleep 1 if $signal == 0; #print要換行符才會有輸出,不然要等到mojo結束了才有輸出。 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 '設置狀態' % end %= form_for '/status' => (method => 'POST') => begin %= hidden_field action => 'create' %= submit_button '創建線程' % end
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。