Bonjour,
Je ne peux pas mettre mon code (code d'entreprise) mais je vous explique mon problème peut être quelqu'un aura une idée.
Je développe sous Windows Mobile 5.0 avec QT 4.6.3.
J'utilise visual studio 2005.
J'ai une classe de communication qui est chargé de se connecter plus ou moins régulièrement suivant le temps de reconnexion que lui indique le serveur distant. Cette classe est un Heritage d'un QRunnable et QObject, elle contient en plus une boucle évènementielle (QEventLoop*) ainsi qu'une méthode exec qui se charge de lancer la QEventLoop.
J'ai une classe manager avec une machine d'état qui en fonction des actions utilisateur réalise différent tache et notamment la création de communication. Il s'agit d'un heritage d'un QThread.
Petite précision si je passe par des QRunnable c'est parce que j'ai vu que sur certain téléphone, au bout d'un moment n'arrivait plus a me créer des threads. Je profite donc des mécanismes du QthreadPool.
Dans ma classe de communication j'ai un QTimer* qui, lorsqu'il timeout, effectue une reconnexion, or lorsque je crée mon client depuis le manager et qu'il tente de lancer le timer, j'ai un QObject::startTimer: timers cannot be started from another thread; Je comprend bien le soucis, mon client de communication ne peut lancer son timer lui même. Mais dans ce cas qui doit lancer ce timer? j'ai essayer de faire un movetothread de mon timer vers le thread manager, rien n'y change.
Je me dit que peut être c'est l'instance de mon QRunnable que je doit faire movetothread vers le thread auquel appartient mon timer que je peux connaitre via m_timer->thread().
D'ailleurs il n'y a pas si longtemps que ça j'arrivais parfaitement a le lancer, mais c'était lorsqu'il était arrêter que cela foirai. J'ai fait pas mal de modification depuis et je n'arrive plus à le lancer.
Si quelqu'un a une idée, dites moi. Si vous avez besoin de précision, j'essayerai de vous en donné.
Merci d'avances
Partager