Portál AbcLinuxu, 8. května 2025 07:01
# Muj vlastni super event, ktery dela super veci (SuperEvent, EVT_SUPER) = wx.lib.newevent.NewEvent() # ... wx.PostEvent(target_window, super_event_instance)což je zamozřejmně wx-specific, ale v QT to bude dost podobné. A k tomu případně
import Queue
class PyQtProxyThread(QThread): __signalName = 's' def __init__(self, _destinationCallable, _data): assert callable(_destinationCallable) QThread.__init__(self) self.__data = _data self.connect(self, SIGNAL(self.__signalName), _destinationCallable) self.start() def __del__(self): self.wait() def run(self): self.emit(SIGNAL(self.__signalName), self.__data)
// Volano z gui vlakna, treba z hlavniho okna aplikace. QThread *thread = new QThread; Worker *pracovnik = new Worker(); // pracovnik dedi QObject pracovnik->moveToThread(thread); // A ted pokud potrebujes predávat data z pracovnika (ktery bezi na jinem vlakne) do hlavniho vlakna, tak to delej pres signaly. connect(pracovnik, SIGNAL(abc()), this, SLOT(abc()));Jak bylo řečeno, connect() automaticky pozna, že slot se nachazi v jinem vlakně nez signal a provede automaticky mezivlaknovej invoke.
QCoreApplication::setAttribute(Qt::AA_X11InitThreads);
hned pri startu aplikace.
Pokud to neudelas, tak muzes sestrelit Unity (anebo jiny WM) popr. muze umrit tvoje aplikace.
Xlib byla katastrofa (co se multithreadingu tyce) a XCB na tom neni o moc lip.
Pokud to neudelas, tak muzes sestrelit Unity (anebo jiny WM) popr. muze umrit tvoje aplikaceAno, tvoje aplikace umřít může, ale to, že sestřelíš Unity či jiný WM je samozřejmě krávovina, leda by byl zabugovaný. Kecáš totiž přes socket s Xkama, popř. něco přes sdílenou paměť (třeba obrázky) a X server potom s WM úplně jiným socketem. A to, jestli je tvoje aplikace vícevláknová pro WM neznamená vůbec žádný problém.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.