2012-08-26 57 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'。 –