很无聊。。。随便写D代码 不得不说perl的多线程简单易懂

加个ajax就好了


useMojolicious::Lite;usethreads;usethreads::shared;#请直接使用./x.pldaemon启动#morbo启动,线程不会自动关闭。要手动关闭改代码才行,不然创建的线程仍会执行#当然你的线程不是个死循环,使用morbo也是不错的。线程执行完就会自动退出#当然你可以使用其他方式避免线程句柄被重置。#线程共享变量,my$signal:shared=-1;my$i:shared=0;#线程句柄my$thr;#接受POSTGET都是它。any'/status'=>sub{my$c=shift;#只要模块里有要使用的,即使是空值都要传过去,不然在模块里会报错。#Globalsymbol"$xxx"requiresexplicitpackagename$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$thrif$signal==-1;$c->stash(thr=>$thr);}#根据传进来的参数创建线程if($c->param('action')){my$action=$c->param('action');if($actioneq'create'){$thr=threads->new(\&ppp,1)unless$thr;$c->stash(thr=>$thr);}}$c->render('status');};#线程函数subppp{#接受第一个参数$signal=shift;#0的时候跟false一样while($signalor$signal==0){#睡一秒钟sleep1;lastif$signal==-1;#再睡一秒钟sleep1if$signal==0;#print要换行符才会有输出,不然要等到mojo结束了才有输出。print"running.\t.".$i++."\n"if($signal==1)}}app->start;__DATA__@@status.html.ep%unless($thr){nothreadscreatorthreadsdownbbbba<br>%}else{<metahttp-equiv="refresh"content="5">%}ThestatusCanbeexit=-1stop=0start=1<br>Thestatusnowis<%=$status%>.i=<%=$i%>.thr=<%=$thrifdefined$thr%>%=form_for'/status'=>(method=>'POST')=>begin%=text_field'signal'%=submit_button'设置状态'%end%=form_for'/status'=>(method=>'POST')=>begin%=hidden_fieldaction=>'create'%=submit_button'创建线程'%end