[C++-sig] Fwd: Help - Callbacks

Pierre Barbier de Reuille pierre.barbier at cirad.fr
Fri Apr 30 15:42:26 CEST 2004


Is your video playing in another thread ? If that's the case, that's
very probably a problem with the "thread-safety" of Python. If you
successfully overcome this problem please tell the list, I'm very
interested in that !

Briefly the problem is that the thread executing some Python code has to
acquire the interpreter lock. But you can't check the lock without
blocking your thread ... (at least I found no function to do that in the
Python/C interface).

Pierre

On Fri, 2004-04-30 at 15:25, Richard M Norton wrote:
> Hello, Im having difficulties concerning using callbacks that have been 
> extended in python. Im using the windows video API DirectShow to play video 
> to a screen through a transform method. The problem occurs when the 
> Transform method is called from an object extended in python as a callback, 
> not when called explicitly. How do I represent this functionality and 
> prevent the python interpreter from crashing? I do not think the problem in 
> this case is from the live times of the objects, but I may be wrong. Is 
> using boosts function and bind features a solution, and if so how?
> 
> Many Thanks,
> Richard
> 
> // Cut down version of the C++ code
> 
> class Callback
> {
> 	virtual void Transform() = 0;
> }
> 
> class Player
> {
> 	Player(Callback *);
> 	void Play();	// Play the video to the screen, returns allowing 
> video to continue play
> }
> 
> class Callback_Wrap : public Callback
> {
> 	Callback_Wrap(PyObject *obj) : self(obj) {}
> 	virtual Transform() {call_method<void>(self, Transform);}
> 	PyObject *self;
> }
> 
> BOOST_PYTHON_MODULE(MyVideo)
> {
> 	class_<Callback, boost::noncopyable, 
> boost::shared_ptr<Callback_Wrap> >(Callback)
> 		.def(Transform, &Callback::Transform)
> 		;
> 
> 	class_<Player>(Player, init<Calback *>())
> 		.def(Play, &Player::Play)
> 		;
> }
> 
> 
> # Example python use
> 
> from MyVideo import *
> 
> class My_Callback(Callback):
> 	def Transform(self):
> 		print Hello, My_Callback here!
> 
> a = My_Callback()
> b = Player(a)
> a.Play()
> 
> 
> 
> 
> 
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
-- 
Pierre Barbier de Reuille

INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
Botanique et Bio-informatique de l'Architecture des Plantes
TA40/PSII, Boulevard de la Lironde
34398 MONTPELLIER CEDEX 5, France

tel   : (33) 4 67 61 65 77    fax   : (33) 4 67 61 56 68 





More information about the Cplusplus-sig mailing list