6

いくつかの Web サイトを処理する方法を管理するいくつかのクラスを作成しましたが、両方で同様の方法 (つまり、ログイン、更新) を使用しています。各クラスは、独自の WATIR ブラウザ インスタンスを開きます。

class Site1
    def initialize
         @ie = Watir::Browser.new
    end
    def login
         @ie.goto "www.blah.com"
    end
end

スレッドのないメインのコードのサンプルは次のとおりです

require 'watir'
require_relative 'site1'

agents = []
agents << Site1.new

agents.each{ |agent|
     agent.login
}

これは正常に機能しますが、現在のエージェントがログインを完了するまで次のエージェントに移動しません。これを処理するためにマルチスレッドを組み込みたいのですが、機能しないようです。

require 'watir'
require_relative 'site1'

agents = []; threads = []
agents << Site1.new


agents.each{ |agent|
     threads << Thread.new(agent){ agent.login }
}

threads.each { |t| t.join }

これにより、エラーが発生します: 不明なプロパティまたはメソッド: navigate。HRESULT エラー コード: 0x8001010e。アプリケーションは、別のスレッド用にマーシャリングされたインターフェースを呼び出しました。

これを修正する方法、または同様の機能を実装する方法を知っている人はいますか?

4

1 に答える 1

0

これについてはよくわかりませんが、これはスレッドを使用したスイングです。

require 'thread'
  threads = []                # Setting an array to store threaded commands
  c_thread = Thread.new do    # Start a new thread
    login                     # Call our command in the thread
  end
  threads << c_thread
于 2013-09-18T00:17:51.890 に答える