normally if in process intensive function can call qcoreapplication::processevents()
or qeventloop::processevents()
ensure processing doesn't block other signals , slots.
however, if create new qthread
, move worker thread, don't have qcoreapplication
or qeventloop
call processevents()
.
from research, seems should able install qeventloop
on new qthread
created, , can call processevents()
on qeventloop
.
however, can't figure out how this. figure might this:
qthread *thread = new qthread(this); worker *worker = new worker(this); qeventloop *loop = new qeventloop(); connect(thread, signal(finished()), worker, slot(deletelater())); connect(thread, signal(finished()), thread, slot(deletelater())); connect(thread, signal(started()), worker, slot(startprocessing())); connect(worker, signal(done()), thread, slot(quit())); connect(worker, signal(done()), loop, slot(quit())); worker->movetothread(thread); //loop->exec() // blocks processing of thread loop->movetothread(thread); //loop->exec() // loop not member of thread anymore , // if was, block thread starting thread->start(); //loop->exec(); // loop not member of thread anymore , // if was, block thread continuing
every place try start loop has sort of issue. if worked, how call processevents()
on qeventloop()
?
alternatively, qthread
has function seteventdispatcher()
, qabstracteventdispatcher
has processevents()
function, can't seem find subclasses qabstracteventdispatcher
.
what proper way process events during intensive worker function on qthread
?
according documentation, calling qcoreapplication::processevents()
processes events whichever thread called it.
Comments
Post a Comment