diff --git a/SWIG/Examples/test-suite/director_thread.i b/SWIG/Examples/test-suite/director_thread.i new file mode 100644 index 000000000..5c1acdb0f --- /dev/null +++ b/SWIG/Examples/test-suite/director_thread.i @@ -0,0 +1,47 @@ +%module(directors="1",threads="1") director_thread + +%{ +#include +#include + +class Foo; +extern "C" void* working(void* t); +%} + +%director Foo; + +%inline { + class Foo { + public: + int val; + pthread_t *t; + + Foo() : val(0) { + t = new pthread_t; + } + + virtual ~Foo() { + delete t; + } + + void run() { + pthread_create(t,NULL,working,this); + sleep(5); + } + + virtual void do_foo() { + val += 1; + } + }; +} + +%inline { + extern "C" void* working(void* t) { + Foo* f = static_cast(t); + while (1) { + sleep(1); + f->do_foo(); + } + return 0; + } +}