我想知道如何将 Ruby 的事件循环与 C 中的 Ruby 扩展集成。我不确定这是否是做我想做的事情的正确方法,所以我会解释这个问题。
我正在使用msgrcv
and msgsnd
(IPC) 所以在 Ruby C 扩展和另一个应用程序之间发送消息。问题是接收消息的扩展方法会创建一个无限循环,如下所示:
do{
if(msgrcv(msqid, &rcvbuffer, MAXSIZE, 1, 0) < 0){
printf("Error");
}else{
rb_funcall(self, rb_intern("callback_method"), 1, rb_str_new2(rcvbuffer.mtext));
}
} while(strcmp(rcvbuffer.mtext, "exit") != 0);
并且锁定了 ruby 的解释器。我希望能够在没有阻塞的情况下调用 Ruby 扩展中的接收器方法。
如何才能做到这一点?