打印

提个问题,关于Ruby实现伪多进程

提个问题,关于Ruby实现伪多进程

各位:

目前我想用ruby在windows上实现以下事情,起2个进程(或线程),
其中一号进程(线程)读取命令行的用户输入并做出响应;
二号进程(线程)后台处理文件,当处理到某个特定文件的时候自动关闭一号和二号进程(线程),程序自动进入另外的处理。

以上内容我尝试使用ruby的线程实现,但是获取命令行输入使用gets方法,就会发生阻塞,二号线程一直被阻塞,郁闷啊
在linux下使用fork就很得心应手,但是想在linux上实现 应该怎么做啊,请大家指教

代码如下 请指教


$flag = 0
$sat = 0

thr1 = Thread.new do
 while 1
  puts "WAIT>"
  str = $stdin.gets
  if str.chomp == "exit"
   break
  else
   puts str
  end
  end
  if($sat == 1)
  Thread.pass
  end
  #sleep 1
 end

thr2 = Thread.new do
 while 1
  if ($flag > 200) then
  thr1.kill
  exit
  end
  $flag += 1
  puts $flag
  $sat = 1
  sleep 1
  $sat = 0
 end
end

thr1.join

puts "All end"
#eof

TOP

你的程序跑的可以距,2号线程并没有阻塞呀.如果阻塞了,你的puts $flag怎么能输出值出来了?

TOP

我想让2号线程独立运行
但目前的情况是程序运行了一号线程打印出“WAIT>”
然后二号线程打印出 $flag的值 “1”
然后程序就等待了 (此时整个程序是卡在一号线程的 str = $stdin.gets语句上)
一定要用户在命令行上输入点什么按个回车
程序才能继续处理
一号线程再打印出“WAIT>”
然后二号线程再打印出 $flag的值 “2”
然后又卡在一号线程的“gets”了

二号线程也歇菜不走了。。。

怎么让二号线程能独立的动起来啊?

TOP

没有,我的运行情况是,在1号在wait的时候,2号不断的在打印值,说明2号线程并没有阻塞.

TOP

呃?您用得什么 ide环境?

TOP

在什么环境下运行的啊?

TOP

顶楼的程序是在windows下运行有问题,请大家帮忙指点

TOP

我在linux下运行的,,

TOP

已经自己解决了。。
各位打扰了。。。。

TOP

windows和linux有很大的区别,,,,

TOP

实际上我的问题在于我所安装的ruby版本错误
我所安装的是one-click-installer版本,这个版本对IO和Thread的支持并不好,可能是在编译的时候使用了一些阻塞的函数。

安装非one-click-installer版本即可解决这个问题。

one-click-installer版本问题多多,大家慎用。

TOP

还是让ruby回归到*nux吧。

TOP

2008-12-02 10:29 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61