Witam,
przerabialem program z qtpythona na qtruby. Z interfejsem w qt poszlo gladko, z reszta troche mniej, ale wlasciwie wszystko skonczone. Problem mam ze stoperem. Chcialem go zrobic tak jak w tuzinie innych programow w 5 innych jezykach, tj. osobny thread, ktory zasypia co 1 sekunde i zmienia wartosc zegara.
W moim ruby-wykonaniu wyglada to tak:
@thread = Thread.new { loop { countTime; sleep(1) } }
Problem w tym, ze dziala to fatalnie! Timer zamarza i czeka az zamacham myszka przed ekranem (o dziwo to pomaga, nie mowcie, ze GUI sie nie repaintuje na czas?! O_O). Czy ktos moze mi wytlumaczyc, czemu teoretycznie poprawny kod dziala na Threada, nie jakby mial na chwile przysnac, ale jakby dostal narkoze?
EDIT:
Ba, natrafilem na cos o wiele gorszego. Gdy stoper dojedzie do zera, thread powinien o tym poinformowac watek glowny (wyskakuje popup dialog i zmeinia sie pare zmiennych) i grzecznie dac sie zabic. Problem w tym, ze mimo prob z Thread.kill(ten_watek), ten_watek.stop i zwyklego konczenia petli, tkora potrzymywala rzekomy watek, ciagle otrzymuje jakze trefny komunikat:
QObject::killTimer: timers cannot be stopped from another thread
Coz na to poradzic? O_o