1
Rubyスレッドを使用して、異なるOSプラットフォーム間でコードを転送する方法を学ぶ。コンソールからマルチスレッドを制御する方法
問題は、non_join1が完了するまでコンソールが凍結され、non_join2が起動しないようにすることです。 non_join1は、スレッドが完了するまでjoinコマンドを待機します。
このソフトウェアでは、独立して動作する複数のルーチンが必要です。プライマリプログラムは、リアルタイムでデータを収集するスタンドアローンです。収集されたデータはファイルに書き込まれます。スレッドを使用する異なるプログラムは、データを並行して処理します。起動/停止とステータスはメインコンソールから制御されます。
データファイルを分析してスレッドからステータスを取得するために必要な別のプログラムを起動するには、最高のルビーメソッドは何ですか?代わりに、例えば、この機能を使用して、 ``(新しいプロセスを作成する)このフォークを試して実行する
おかげで、 PB
# This is the console that starts up the multiple threads.
#!/usr/bin/ruby
loop do
puts " input a command"
command = gets.chop!
control = case command
when "1" : "1"
when "2" : "2"
end
if control == "1" then
puts `date`+ "routine 1"
puts `./non_join1.rb`
puts `date`
end
if control == "2" then
puts `date` + "routine 2"
`./non_join2.rb`
end
end
#!/usr/bin/ruby
# Example of worker program 1 used to process data files
#file non_join1.rb
x = Thread.new { sleep 0.1; print "xxxxxxxxx"; print "yyyyyyyyyyy"; print "zzzzzzzzzz" }
a = Thread.new { print "aaaaaaaaa"; print "bbbbbbbbbb"; sleep 0.1; print "cccccccc" }
puts " "
(1..10).each {|i| puts i.to_s+" done #{i}"}
x.join
a.join
sleep(30)
#!/usr/bin/ruby
# Example of worker program 2 used to process data files
#file non_join2.rb
x = Thread.new { sleep 0.1; print "xxxxxxxxx"; print "yyyyyyyyyyy"; print "zzzzzzzzzz" }
a = Thread.new { print "aaaaaaaaa"; print "bbbbbbbbbb"; sleep 0.1; print "cccccccc" }
x.join
a.join
$ ./call_ruby.rb
input a command
1
Sat Feb 18 10:36:43 PST 2012
routine 1
aaaaaaaaabbbbbbbbbb
1 done 1
2 done 2
3 done 3
4 done 4
5 done 5
6 done 6
7 done 7
8 done 8
9 done 9
10 done 10
xxxxxxxxxyyyyyyyyyyyzzzzzzzzzzcccccccc
Sat Feb 18 10:37:13 PST 2012
input a command
したがって、プログラムが '。/ non_join1'が終了してから戻るのを待たないようにするeコール?そのためには、 'Process.spawn'を使用します。 – Linuxios