>>>>> "G" == Geoff Cadien <geoff / nm156.org> writes: G> #include <pthread.h> ruby is multi threaded, this mean that you don't need to use pthread. G> module = rb_require("test.rb"); rb_require return Qtrue if the file was successfully loaded. If "test.rb" create a module, or a class you can call rb_const_get() to retrieve the VALUE associated with the module (class), otherwise use rb_cObject (if the function is at top level) G> status = pthread_create(&thread_id, NULL, ruby_thread, NULL); G> pthread_join(thread_id, NULL); Here you must use rb_thread_create(), and call `join' A little example : pigeon% cat thr.c #include <ruby.h> static VALUE thr_run(obj) VALUE obj; { int i; for (i = 0; i < 2; i++) { rb_funcall(obj, rb_intern("test"), 0); } return Qnil; } int main() { VALUE module, thread; ruby_init(); rb_require("test"); module = rb_const_get(rb_cObject, rb_intern("Test")); thread = rb_thread_create(thr_run, (void *)module); rb_funcall(thread, rb_intern("join"), 0); return 0; } pigeon% pigeon% cat test.rb module Test def test() print "Hello\n" end module_function :test end pigeon% pigeon% thr Hello Hello pigeon% Look at mod_ruby.c, you have a more complete example. Guy Decoux