2013-09-27 4 views
0

J'ai créé un serveur réseau simple. Le fichier main.cpp appelle app.exec() à l'état inactif et le thread se déclenche comme prévu une fois que j'ai établi une connexion.Comment traiter les signaux/inactifs dans un QThread?

En fonction run() du fil, je HookUp un signal de readyRead à une fente appelée readCommand:

connect(tcpSocketPtr, SIGNAL(readyRead()), this, SLOT(readCommand())); 

et j'ai défini le readCommand dans le fichier .h de la classe, comme « privé slot "- car il est seulement appelé à partir de la classe. J'espère que c'est vrai.

Après la connexion ci-dessus, la fonction run() renvoie. Il n'y a pas d'appel app.exec() ou quoi que ce soit. Est-ce que cela pourrait être le problème? Dois-je appeler une fonction pour que le fil écoute les signaux?

Lorsque j'envoie du texte au port, la fonction readCommand ne se déclenche jamais ... et je n'ai aucune idée de comment déboguer this..suggestions?

+0

Vous devez appeler 'QThread :: exec()' dans le corps de 'run()' pour démarrer la boucle d'événement du thread. Sinon, le thread se fermera à la fin de 'run()'. –

+0

Cela l'a fait merci! – TSG

+0

@Michelle: quelle est la raison pour laquelle vous n'avez pas sélectionné de réponse? Qu'est-ce qui manque à la réponse? – lpapp

Répondre

0

et j'ai défini le readCommand dans le fichier .h de la classe, comme « slot privé » - car il est seulement appelé à partir de la classe. Espérons c'est vrai.

Oui, qui semble correct.

Toutefois, vous devez utiliser int QThread::exec() [protected] à l'intérieur de la méthode void QThread::run() [virtual protected] pour démarrer l'exécution du thread plutôt que de revenir presque instantanément.