2010-07-07 21 views
7

Ben ve bir arkadaşım Boost :: Python kullanan bir uygulama geliştiriyor. Boost :: Python aracılığıyla kullanıcılara devredilen ve uygulama gerektiren ve bazı geri arama mekanizmaları için kullanan bir sınıf oluşturan kullanıcılara C++ (iyi bir sanal sınıf) tanımladım.Boost :: Python and Boost :: ile ilgili sorunlar Sorunlar ::

Çok uzak olan her şey oldukça iyi gidiyor. Şimdi, işlev geri çağırma biraz zaman alabilir (kullanıcı bazı ağır şeyler programlamış olabilir) ... ama pencereyi yeniden boyamamız gerekiyor, bu yüzden "takılı" görünmüyor. Bunun için Boost :: Thread kullanmak istedik. . Her seferinde yalnızca bir geri arama çalışacaktır (başka bir iş parçacığı aynı anda python çağırmayacaktır), bu yüzden çok büyük bir şey olmayacağını düşündük ... python içindeki konuları kullanmıyoruz, ne de C++ kodu python için sarılmış.

biz Py_Initialize(), o zaman, kendi artırmak parçacığı içindeki bir geri çağırma işlevi çağırmadan önce, biz makro PY_BEGIN_ALLOW_THREADS ve ve iplik sona erdi makro PY_END_ALLOW_THREADS kullanmak hemen sonra) (PyEval_InitThreads çağırıyor yaptıkları.

Yürütmenin ikinci makroya hiçbir zaman ulaşmadığını söylememe gerek yok. Her çalıştığında birkaç hata gösterir ... ama gerçek geri çağırma sırasında her zaman t vardır. Ben çok fazla googledim, hatta bazı PEP dokümanı konuları ile ilgili olarak okudum, ama hepsi python modülünün içinde yer alan iplikler hakkında konuşurlar (ki bu da sadece saf bir sanal sınıfı açığa çıkarır). Birkaç iş parçacığından Python çağrılıyor.

Lütfen yardım edin, bu birkaç saat boyunca beni sinirlendiriyor.

Ps. yardım et!

+0

Hangi hataları görüyorsunuz? –

+0

Her zaman bir SIGSEGV'dir. – Fabzter

cevap

1

Python birden çok ileti dizisinden seri olarak çağrılabilir, bunun bir sorun olduğunu düşünmüyorum. PY_BEGIN_ALLOW_THREADS ve PY_END_ALLOW_THREADS'den önce gerçekleşen hataların söylendiği gibi, hatalarınız sadece kötü C++ kodundan geliyor gibi geliyor.

Bunun doğru olmadığını biliyorsanız, gerçek kodunuzun biraz daha fazlasını yayınlayabilir ve tam olarak nerede hata yaptığını ve tam olarak hangi hataları verdiğini gösterebilir misiniz?