Ruby のイベント ループを C の Ruby 拡張機能と統合する方法を考えています。これが私がやろうとしていることを実行する正しい方法かどうかわからないので、問題を説明します。
msgrcv
and (IPC)を使用しているmsgsnd
ので、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拡張機能でブロックせずにレシーバーメソッドを呼び出せるようにしたいです。
これはどのように行うことができますか?