From: Mike J. <mrj...@mi...> - 2009-05-28 21:54:35
|
Well, the answer is historical. The tothread and toTask interface used to have different custom thread implementations for windows and pthread systems, which was changed to use QThread (me?). Sorry, I'd meant to clean up all of that but a lot of that old thread code is horribly brittle and generally screwed up. I spent months battling crashes and once I got it stable I didn't really feel like fooling with it any more. :-) As far has overriding exec(), I think I just needed it public for the runnable class. My memory on that is hazy but I seem to remember QThread not having it's own event loop started until you did that. It's meant to call from the QThread subclass (thus protected) but in this case I needed to do it from the runnable class. The connection pool uses QThread on it's own so it can control the thread lifecycle and deletion. I think it was because Runnable and toTask try to clean up themselves. I battled crash-proofing disconnecting from a server for a while and ended just using QThread directly. toRunnable is just an attempt to make it easier to fire off a thread from a tool, but the connection pool is a little more involved. If you want to clean up the rest of the totask it probably wouldn't be a big deal. I've solved most of the nastier thread problems in the tools and TOra is pretty stable now. Or at least loads better than it was. On Thu, May 28, 2009 at 1:33 PM, Ivan Brezina <iv...@cv...> wrote: > > Hi, > I just went through Tora sources and focused on threading. > And I found that there are two similar classes that > do the same/similar thing. > > 1st one: > tothread_p.h, tothread_p.h > toThread -> taskRunner -> toTask > > - toThread holds pointer to instance to taskRunner and executes its method > taskRunner::start > - taskRunner is subclass of QThread, has overriden method run, > which runs in a separate thread. taskRunner::run executes > toTask::run > - toTask implementation of "Command" design pattern(or TaskRunner?) > > I've found these subclasses of toTask: > toalert.h: class pollTask : public toTask > toconnection.h: class cacheObjects : public toTask > todebug.h: class targetTask : public toTask > tonoblockquery.h:class queryTask : public toTask > totuning.h:struct overviewQuery : public toTask > > 2nd one: > torunnable.h > toRunnableThread: public QThread -> toRunnable: public QObject > > These classes use similar approach as the first one, > but the toRunnble is subclass of QObject and toRunnable has > overriden method exec. > I've found these subclasses of toRunnable > toconnectionpool.h: class toConnectionPoolExec : public toRunnable > toeventqueryclass.h: class toEventQueryTask : public toRunnable > > Besides these approaches there is the class toConnectionPoolTest, > this class implements threading itself. Without any relation > to toThread nor toRunnable. > > Classes having own run method: > toTask: > toalert.cpp:305:void toAlert::pollTask::run(void) > toconnection.cpp:1359:void toConnection::cacheObjects::run() > todebug.cpp:418:void toDebug::targetTask::run(void) > tonoblockquery.cpp:63:void toNoBlockQuery::queryTask::run(void) > totuning.cpp:1133:void toTuningOverview::overviewQuery::run(void) > toRunnable: > toconnectionpool.cpp:113:void toConnectionPoolExec::run() { > toeventquerytask.cpp:97:void toEventQueryTask::run(void) { > Own Implementation: > toconnectionpool.cpp:66:void toConnectionPoolTest::run() { > torunnable.cpp:61:void toRunnableThread::run() { > tothread.cpp:144:void taskRunner::run(void) > > Subclasses of QThread: > toconnectionpool.h:class toConnectionPoolTest : public QThread { > torunnable.h:class toRunnableThread : public QThread { > tothread_p.h:class taskRunner : public QThread > > > And now I would like to ask, why are there different > classes for starting of new thread. Is there reason for this? > Are there any hidden requirements for different approaches? > > > Thx Ivan > > > ------------------------------------------------------------------------------ > Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT > is a gathering of tech-side developers & brand creativity professionals. Meet > the minds behind Google Creative Lab, Visual Complexity, Processing, & > iPhoneDevCamp as they present alongside digital heavyweights like Barbarian > Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com > _______________________________________________ > Tora-develop mailing list > Tor...@li... > https://lists.sourceforge.net/lists/listinfo/tora-develop > > |