From: Shea Martin Date: 2005-10-13T21:01:54+09:00 Subject: threading in win32 I have a TK app. On a button presses, I call a windows copy command which can take up to 10 minutes to run. In order to not freeze the GUI, so that the gui can be doing other stuff, I launch the command in a thread. Running the command with system, does not let me get the output of the command, thought it does not lock gui up at all. So, I tried two other versions. I had the most success with version 3. I believe version 3 is what the TkTextIo example uses in ruby 1.8.3. See below. # callback for tk button press def buttonPress Thread.new do Button.state( "disable" ); runCommand( "copy /Y bigfile1 dest1" ); runCommand( "copy /Y bigfile2 dest2" ); runCommand( "copy /Y bigfile3 dest3" ); Button.state( "active" ); end end #version 1 def runCommand( cmd ) system( cmd ) end #version 2 def runCommand( cmd ) IO.popen( cmd ) do | cmd_out | cmd_out.each_line do | line | MyTextArea.insert( 'end', line, 'normal' ) end end end #version 3 def runCommand( cmd ) cmd_pipe = IO.popen( cmd ) t = Thread.new { cmd_pipe.each{ | line | addText( line ) } } t.join end Only version 1 allows teh gui to remain responsive. Unfortunately it does not capture the output of the copy command. I would like to something with a fork, though win32 ruby does not seem to support it. Any ideas. Thanks, ~S