[PyKDE] Singleshot problems in QThreads on Windows.
Truls A. Tangstad
kerfue+pykde at herocamp.org
Fri Aug 20 15:47:04 BST 2004
On Fri, Aug 20, 2004 at 11:59:50AM +0200, Truls A. Tangstad wrote:
> We're distributing a cross-platform application and having problems
> with QTimer.singleShot on windows.
>
> It seems that using QTimer from a QThread doesn't work, the callback
> is never run.
>
> The attached example shows the problem. On debian/linux both printing
> callbacks are run, but on windows only the first non-threaded one is
> called.
>
> Please let me know if I'm missing any restrictions on PyQt, threads,
> QTimer etc., or if the problem is with my code.
>
> Versions:
> Python 2.3.4
> Qt 3.3.3
> PyQt-commercial-snapshot-20040819
> sip-snapshot-20040819
> Windows XP Pro SP1
After hacking around with C++, it seems that the problem is with Qt in
windows, not PyQt.
The problem is now that we've created a workaround [1] for a
postEvent-bug which we cannot reproduce yet in a small example. The
workaround depends on being able to use QTimer.singleShot() to trigger
our own event handling in an object in the GUI-thread, which updates
the GUI and passing around the data within a thread-safe Queue.
For windows, all QTimer calls made in other threads than the
GUI-thread seems to be ignored, and using QApplication.postEvent
sporadically hangs the entire application.
So, what I'm wondering, is if there's a way to update the GUI with
state created by the worker-threads without using postEvent or QTimer
in the worker-threads? There must be some way to trigger calls in the
GUI-thread without these.
[1] - http://mats.imk.fraunhofer.de/pipermail/pykde/2004-August/008314.html
--
Truls A. Tangstad - <kerfue+pykde at h e r o c a m p.org>
More information about the PyQt
mailing list