很无聊。。。随便写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