000
12.08.2009, 23:19 Uhr
FunnyDingo
|
Hallo zusammen,
also meine Frage ist schon etwas knifflig und ich hoffe ich kann es verständlich erklären.
Meine Anwendung lädt via dlopen SharedObjects dynamisch nach. Diese sollen in einem eigenen Thread laufen. Bisher müssen die Module sich selber darum kümmern in einem Thread zu laufen und ich wollte das nun so modifizieren, dass die Module nicht mehr so viel machen müssen. Dazu habe ich den Code zum erstellen der Threads in die Basis-Klasse gesteckt. Resultat: die Module starten nicht mehr.
C++: |
class CBase { private: pthread_t listenThread; pthread_t sendThread; pthread_cond_t threadCondition; pthread_mutex_t threadMutex;
protected: ipcQueue<yac::npm::CRequest*> *workerQueue;
public: CBase(std::string, ipcQueue<yac::npm::CRequest*> *); virtual ~CBase(); static void *startListen(void *); virtual void listen() {}; static void *startSend(void *); virtual void send() {}; void awake(); };
|
Wichtig sind hier startListen() und startSend(). Ich nehme mal den Code aus startListen, da beide vom Aufbau identisch sind:
C++: |
void *CBase::startListen(void *obj) { LOG_DEBUG("yac::npm::CBase", "Try to call listen()"); CBase *tmp = (CBase*)obj; if(tmp != NULL) tmp->listen(); else LOG_DEBUG("yac::npm::CBase", "Sorry, tmp is NULL :-("); return NULL; }
|
Ich habe gerade den Eindruck, dass nur listen()/send() aus der Basis-Klasse ausgeführt werden (ich bekomme nicht die Meldung "Sorry, tmp is NULL"). Aber da listen() und send() virtual sind, müssten doch trotzdem die abgeleiteten Methoden ausgeführt werden, oder?
Wo ist hier mein (Denk-)Fehler?
lg, Funny -- "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)
Meine Website: http://www.funnydingo.de |