使用RubyFFI从ruby中使用无限循环停止c函数

时间:2017-02-23 16:08:07

标签: c ruby ruby-ffi

以下是我的情景,

    1. 我使用Ruby FFI从Ruby调用一个名为'subscribe'的c函数
    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
   }
}

有什么想法?有没有更好的方法来管理它?

1 个答案:

答案 0 :(得分:1)

我认为你不应该认为这是停止函数,它更像是停止函数运行的线程。函数一般不能“停止”;这是什么意思?它不能只是消失,如果它正在执行一个指令那么CPU应该做什么呢?

然而,

线程是可调度的执行单元,它们可以被销毁。你需要阅读你正在使用的线程API(也许Thread.new()调用返回了什么?)并从那里弄清楚。