From: Alexander Kellett Date: 2004-12-20T01:56:47+09:00 Subject: Re: rubyqt, popen problem in a log viewer or use qt::eventloop::processevents (something like that :P) Alex On Dec 19, 2004, at 1:47 PM, Richard Dale wrote: > Bauduin Raphael wrote: > >> Hi, >> >> Thanks for the tip about QProcess, I'll experiment with it later. >> For the time being, I've implemented nobu nokada's suggestion. >> >> I still have the problem refreshing the widget though.... >> >> With this code: >> >> Thread.new("/tmp/test") do |f| >> begin >> tail = IO.popen("/usr/bin/tail -f #{f}","r") >> while line = tail.gets >> hello.append line.chomp >> puts line.chomp >> end >> >> ensure >> puts "killing #{tail.pid}" >> Process.kill("INT", tail.pid) >> tail.close >> end >> end >> >> the while loops (updating the widget AND printing line in the >> terminal) >> seems to be run only when activity occurs in the window (click, >> entering >> window). >> >> How comes the line is printed in the terminal only when activity >> occurs >> in the window? > Ruby threads aren't compatible with QtRuby - you have to always use > the same > ruby thread to make Qt calls. Another approach would be to use a > Qt::Timer > to periodically poll for input from tail: > > �slots 'input()' > � > �def initialize() > � super() > � @timer = Qt::Timer.new > � connect(@timer, SIGNAL('timeout()'), SLOT('input()')) > � @timer.start(200) > �end > > �def input > # Read from the pipe, append text to the Qt::TextEdit widget > �end > > -- Richard >