免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lilyzyp
打印 上一主题 下一主题

请教关于多线程的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-12-22 17:40 |只看该作者

请教关于多线程的问题

原帖由 "iamyess" 发表:
register_shutdown_function() 函数 不是 脚本完成以后在后台继续工作

而是在 脚本最后执行的函数,而不是另开进程

这个就是她想要的效果呀。把发信的函数function deliverMail() 通过register_shutdown_function()注册一下然后结束脚本,告诉用户正在发送邮件,需要一些时间。这时这个http请求已经完成了,但是注册的函数仍在服务器上运行,不停的发信,直到任务完成。我想这样可以解释成为在后台工作吧。我可没说什么另开进程之类的东西。由于和浏览器的通信已经结束,这个注册的函数可以将运行的结果通过电子邮件发送客户,报告发送了多少成功了多少。

而是在 脚本最后执行的函数
不知道你在哪里看到这样的解释,能不能 把原话贴出来?

论坛徽章:
0
12 [报告]
发表于 2003-12-22 18:55 |只看该作者

请教关于多线程的问题

"把发信的函数function deliverMail() 通过register_shutdown_function()注册一下然后结束脚本"

"这时这个http请求已经完成了,但是注册的函数仍在服务器上运行,不停的发信,直到任务完成"


那拿一个直接循环发送的来说
你一运行,比如说就循环发送了,那我也说
"这时这个http请求已经完成了,但是注册的函数仍在服务器上运行,不停的发信,直到任务完成"

浏缆器还是一直处于等待结果出现的状态,也就说,不管有没用 register_shutdown_function,只要你关掉或在浏缆器上点 "停止",那 个循环也就停了,这也就是不能说是后台的原因

论坛徽章:
0
13 [报告]
发表于 2003-12-22 19:31 |只看该作者

请教关于多线程的问题

[quote]原帖由 "iamyess" 发表:
"把发信的函数function deliverMail() 通过register_shutdown_function()注册一下然后结束脚本"

"这时这个http请求已经完成了,但是注册的函数仍在服务器上运行,不停的发信,直到任务完成"


那拿一个直接循

论坛徽章:
0
14 [报告]
发表于 2003-12-22 19:39 |只看该作者

请教关于多线程的问题


  1. function a(){

  2. for($i=0;$i<100;$i++){
  3. sleep(1);
  4. }
  5. fopen("./test","w");
  6. }

  7. register_shutdown_function('a');
  8. print "finished";
  9. exit;
复制代码


运行一下,然后关掉 浏览器 ,然后等一百秒后去看 那 个建立的 test 文件吧
按你说的,关掉后也在后台吧,所以那个 test 文件也会建立吧

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
15 [报告]
发表于 2003-12-22 20:12 |只看该作者

请教关于多线程的问题

原帖由 "iamyess" 发表:

运行一下,然后关掉 浏览器 ,然后等一百秒后去看 那 个建立的 test 文件吧
按你说的,关掉后也在后台吧,所以那个 test 文件也会建立吧


可以建立啊,有什么问题?

论坛徽章:
0
16 [报告]
发表于 2003-12-22 20:19 |只看该作者

请教关于多线程的问题

又学到一招~~~

论坛徽章:
0
17 [报告]
发表于 2003-12-22 20:26 |只看该作者

请教关于多线程的问题

上帝啊,都是我的错,不要怪这些迷途的糕羊

你访问了那个 php 文件,是不是等一百秒了 ?

我是说,一访问出现连接上后,就关掉浏览器,因为

访问 ->; http server ->;  调用 php 并开始运行那个循环

如果按照shukebeita说的,那是后台,在第二个步骤后 就算关掉浏缆器 是没什么影响的,可实际是

这时候 关掉浏缆器,就停止了那个进程,而循环后继续的那个  建立文件的命令也将不会被执行

我不知道 shukebeita 摆出那个例子是在说明自己的错误吗?



如果就一般的


  1. print "finished";
  2. for($i=0;$i<100;$i++){
  3. sleep(1);
  4. }
  5. fopen("./test","w");

复制代码


知道有什么分别吗?

论坛徽章:
0
18 [报告]
发表于 2003-12-22 20:54 |只看该作者

请教关于多线程的问题

原帖由 "iamyess" 发表:

知道有什么分别吗?

不知道你有没有试一下我的程序,我的确测试了你的代码,而且我修改了一下:

  1. <?php
  2. function a()
  3. {

  4.         for($i=0;$i<10;$i++)
  5.         {
  6.                 sleep(1);
  7.         }
  8.                 $file=fopen("./test","w");
  9.                 fwrite($file,'Time is '.microtime()."\n");
  10.                 fclose($file);
  11. }

  12. register_shutdown_function('a');
  13. print "finished".microtime();
  14. exit;  
  15. ?>;
复制代码


另外你测试的时候不要等不及立刻关掉浏览器,浏览器返回结果以后再说。程序中的时间数据会告诉你到底是怎么回事

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
19 [报告]
发表于 2003-12-22 21:16 |只看该作者

请教关于多线程的问题

原帖由 "iamyess" 发表:

上帝啊,都是我的错,不要怪这些迷途的糕羊

你访问了那个 php 文件,是不是等一百秒了 ?

我是说,一访问出现连接上后,就关掉浏览器,因为

访问 ->; http server ->; 调用 php 并开始运行那个循环

如果按照shukebeita说的,那是后台,在第二个步骤后 就算关掉浏缆器 是没什么影响的,可实际是

这时候 关掉浏缆器,就停止了那个进程,而循环后继续的那个 建立文件的命令也将不会被执行

我不知道 shukebeita 摆出那个例子是在说明自己的错误吗?

如果就一般的


说实话,费了好大劲儿才看明白你在说什么。
我测试的时候是刚一连接就马上关闭浏览器,结果程序仍在“后台”执行。达到了预期效果。

还要说一点,我改成10秒了。

论坛徽章:
0
20 [报告]
发表于 2003-12-22 21:27 |只看该作者

请教关于多线程的问题

确实是可以在后台运行。
我也用了 10秒,我手边没有支持 php 的BSD,为了验证 正确性,我还向一个网友借了他的 bsd 来用,感谢他。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP