From: "Ara.T.Howard" Date: 2005-10-13T22:21:54+09:00 Subject: Re: threading in win32 On Thu, 13 Oct 2005, Shea Martin wrote: > 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. i think reading from pipes should not block the whole process in windows, at least this works fine on my win system: Thread::abort_on_exception = true t = Thread::new{ IO::popen("tree c:").read } (4 << 2).times{ p 42; sleep 0.42 } puts t.value does it work on yours? perhaps you need something like #version 4 def runCommand( cmd ) Thread::new do IO::popen("#{ cmd 2>&1 }"){|pipe| pipe.each{|line| addText line}} end end which is to say spawn the thread and let it go. you'll need to prevent two commands being run at once too... hth. -a -- =============================================================================== | email :: ara [dot] t [dot] howard [at] noaa [dot] gov | phone :: 303.497.6469 | Your life dwells amoung the causes of death | Like a lamp standing in a strong breeze. --Nagarjuna ===============================================================================