Moi et un ami développons une application qui utilise Boost :: Python. J'ai défini une interface en C++ (bien une pure classe virtuelle), exposée par Boost :: Python aux utilisateurs, qui doivent en hériter et créer une classe, que l'application prend et utilise pour un mécanisme de rappel.Problèmes concernant Boost :: Python et Boost :: Threads
Tout va si bien. Maintenant, le rappel de la fonction peut prendre un certain temps (l'utilisateur peut avoir programmé des trucs lourds) ... mais nous devons repeindre la fenêtre, donc ça ne semble pas "coincé". Nous voulions utiliser Boost :: Thread pour cela . Un seul rappel sera exécuté à la fois (aucun autre thread n'appellera Python en même temps), donc nous avons pensé que ce ne serait pas une grande affaire ... puisque nous n'utilisons pas de threads dans python, ni dans le Code C++ encapsulé pour python.
Ce que nous faisons est d'appeler PyEval_InitThreads() juste après Py_Initialize(), puis, avant d'appeler la fonction de rappel de fonction à l'intérieur de son propre fil de boost, nous utilisons les PY_BEGIN_ALLOW_THREADS macro et, et les PY_END_ALLOW_THREADS macro lorsque le fil est terminé.
Je pense que je n'ai pas besoin de dire que l'exécution n'atteint jamais la deuxième macro. Il montre plusieurs erreurs à chaque fois qu'il s'exécute ... mais il est toujours en appelant le rappel réel. J'ai beaucoup googlé, j'ai même lu quelques-uns des docs PEP concernant les threads, mais ils parlent tous de threading dans le module python (que je ne trouve pas juste une pure classe virtuelle) ou de threading dans python, pas sur le principal application appelant Python à partir de plusieurs threads.
S'il vous plaît aider, cela m'a frustré pendant plusieurs heures.
Ps. Aidez-moi!
Quelles erreurs voyez-vous? –
C'est toujours un SIGSEGV. – Fabzter