[PyKDE] Strange thread problems
Michael Zimmermann
mz-list at incunabulum.de
Fri Jan 13 08:28:37 GMT 2006
Hi there,
currently I am struggling with some weird thread related issues.
a) Segfaults
b) Application freezes
For an application we fetch a tree structure via network connection. For
each subtree a separate worker thread is started. These items fetched
are communicated to the gui using QCustomEvent subclasses.
a) Segfaults; "QThread object destroyed while running"
The worker threads are generated in the widget responsible for
displaying the tree structure. Then they are passed to a container /
controller class that stores threads and does routine managment
functions (deleting finished threads, queuing). Below is the relevant
method from the thread container.
def addThread(self, thread, category = defaultCategory):
self.__createCategory(category)
threadID = generateUId()
self.__threads[threadID] = thread
self.__categories[category].append(threadID)
self.__threads[threadID].start()
# FIXME: why sleep needed here?
time.sleep(0.01)
return threadID
The problem is as follows: Without the time.sleep(0.01) line the application
- either segfaults (no error message)
- or terminates with the error "QThread object destroyed while running"
Any idea what might cause this?
b) Application freezes
In one of the threads I use a construct as you can see below. Because
some of the command are quite lengthy I added qApp.processEvents() calls
to the relevant code sections.
qApp.lock()
ev = ProgressEvent('Loading Groups at Root', step, steps)
QApplication.postEvent(self.__receiver, ev)
ev = RootItemAddedEvent(name, id, obj)
QApplication.postEvent(self.__receiver, ev)
qApp.unlock()
step = step + 1
# qApp.processEvents()
Result: If qApp.processEvents() is called I do get some application
freezes; wihtout none.
So, did I get the concept of qApp.processEvents() wrong? is such a call
actually necessary?
Thanks!
--
cu,
Michael
---------------------------
| mz-list at incunabulum.de |
--------------------------
More information about the PyQt
mailing list