2012-08-26 94 views
0

我似乎無法得到這個工作; Thread.start爲什麼不啓動?爲什麼不能啓動Thread.start?

# encoding: utf-8 
require 'socket' 
print "choose host: " 
host = gets.chomp 
print "choose starting port: " 
sport = gets.to_i 
print "choose ending port: " 
eport = gets.to_i 
def scanner (sport, eport, host) 
    while sport <= eport 
     begin 
      s = TCPSocket.new(host, sport) 
      if s 
       puts "Port #{sport} is open!" 
      end 
     rescue 
      puts "Port #{sport} is closed!" 
     end 
     sport += 1 

    end 
end 
Thread.start([scanner]sport, eport, host) 
+1

不知道,但也許你需要Thread.join。 ?也許主線程正在退出導致整個進程在工作線程完成之前終止。 –

+0

@ AndrewTomazos-Fathomling:這正是這裏發生的事情。你應該把它作爲答案。 –

+0

好吧,它的工作原理:) – Ba7a7chy

回答

2

您需要從主線程加入工作線程。正在發生的事情是主線程退出,導致整個進程退出,並在完成之前關閉工作線程。

您需要等待工作線程啓動後加入它。在您的語言線程API中尋找像Thread.join或類似的函數。

+0

+1 ...可以通過發送'join'到Thread.start的返回值來實現,即'thread = Thread.start(...); thread.join'。 –