Ohledne QThreadu - v reakci na clanek http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong jsem zacal pouzivat moveToThread() a je to prijemne. Kdyz na to dojde, clovek ma jen jednu instanci QThreadu a povesi na ni provedeni ruznych aktivnich objektu, ktere delaji kalkulace. Subclassing je v tomto mene pruzny (samozrejme, ze clovek muze v run() pustit leccos v zavislosti na nejakem svem flagu).
Jinak doporucuju metody z hlavicky <QtConcurrent>, chce to cas si je osvojit, ale clovek se oprosti od low-level threadingu a ve spouste pripadu jsou velmi pouzitelne.
Joo na to jsem taky narazil. Ale .. existuje jeste jeden clanek nazvany "you were doing in not so wrong" ktery celkem objektivne porovnava rozdily.
Kdyz to shrnu:
- trvalo to nekolik let nez to dostalo do dokumentace. Jeste vloni dokumentace doporucovala subclassovat QThread
- neexistuji zadne poradne priklady jak to udelat. Specialne chybi priklady jak to cele ukoncit a destruovat
- bezpecne ukonceni vlakna a dealokace zdroju neni uplne jednoduche.
PS: nevite jak to s thread afinity pri pouzivani signalu mezi vlakny? Kdyz poslu z jednoho vlakna do druheho pointer(anebo referenci) na instanci tak mi hrozi ruzne race-conditions. Kdyz poslu "hodnotu" tak k jakemu vlaknu bude patrit trida kterou jsem poslal? A posle se opravdu ta trida anebo se doruci jeji klon? Na tohle jsem nikde nenasel odpoved a zda se mi, ze kazda verze QT se chova trosku jinak.
ja to ukoncuju takto
AuthenticationAsynchHandler::~AuthenticationAsynchHandler()
{
if (m_thread)
{
m_thread->quit();
m_thread->wait();
delete m_thread;
}
delete m_worker;
}
ad PS: posila se klon, pres QueuedConnection mezi vlakny projde jen objekt, ktery se da zmarsalovat (serializovat), strcit do fronty udalosti a prijemci je vytvoren klon. Kvuli tomu musi byt pro mezivlaknovou QueuedConnection znam metatypovemu systemu pres qRegisterMetaType()
PySide nema s PyQt nic spolocne, nie je to ziadny fork. Vyvoj bol zo zaciatku sponzorovany Nokiou. Ked sa zdrojove kody spolu s Qt predali Digii, ta prestala mat zaujem a sponsoring sa skoncil. Od vtedy je PySide udrziavany len par nadsencami. Vyvoj ide do predu ale strasne pomaly, je citit ze chybaju peniaze na vyvoj.
Qt sa nijako extra nevenujem, ale páči sa mi a budem sa mu venovať, preto ma prekvapuje táto kauza už tým, že existuje.
Odkazovaný článok som iba rýchlo prebehol pohľadom, ale aj tak sa mi ťažko chápe o čo tvorcom Qt vlastne ide.
V prípade rozhodovania, či použiť std::vector alebo std::list, má byť primárnym kontajnerom std::vector, lebo poskytuje veľa vecí, ktoré std::list neposkytuje a veľmi často, až na prípady naozaj dlhých sekvencií má aj vyššiu výkonnosť. Toto je mimochodom známe a dokumentované minimálne 10 rokov.
Paradoxne, jedným z hlavných dôvodov prečo použiť std::list nie je výkonnosť pri vkladaní do stredu, ale jeho správanie počas tohto vkladania.
Okrem iného, std::vector je doporučený aj samotným štandardom.
No a keď to platí pre knižnicu tvorenú často samotnými tvorcami C++, prečo by to malo platiť niečo iné pre ostatné knižnice?
Tak prečo je vlastne za primárny kontajner považovaný QList?