0

以下は私のシナリオです、

    1. Ruby FFI を使用して、Ruby から 'subscribe' という ac 関数を呼び出します。
    2. サブ関数は while ループで無限に実行されます
    3. Ruby からこのサブスクリプションを停止する方法が必要です (無限に実行される c 関数を停止する必要があります)

ルビー

require 'ffi'

module Queue
  extend FFI::Library
  ffi_lib FFI::Library::LIBC
  attach_function :subscribe, [ :void], :void
end

Thread.new { Queue.subscribe() }

Cプログラム

int subscribe(){
   while(true){
     //Do Stuff
   }
}

何かご意見は?これを管理するより良い方法はありますか?

4

1 に答える 1

1

これを関数の停止と考えるべきではないと思います。関数が実行されているスレッドを停止するようなものです。一般に、関数は「停止」できません。それはどういう意味ですか?それはただ消えることはできません。もしそれが命令を実行していたら、CPU は何をすべきでしょうか?

ただし、スレッドはスケジュール可能な実行単位であり、破棄することができます。使用しているスレッド API を調べて (おそらくそのThread.new()呼び出しは何かを返すのでしょうか?)、そこからそれを理解する必要があります。

于 2017-02-23T16:27:33.387 に答える