使用 RubyFFI 从 ruby 停止具有无限循环的 c 函数

Stop a c function with infinite loop from ruby using RubyFFI

以下是我的场景,

Ruby

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
   }
}

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

我认为您不应该将此视为停止函数,它更像是停止运行该函数的线程。函数通常不能 "stopped";这意味着什么?它不能就此消失,如果它正在执行一条指令,那么 CPU 应该做什么?

然而,线程是可调度的执行单元,它们可以被销毁。您需要仔细阅读您正在使用的线程 API(也许 Thread.new() 调用 returns 什么?)并从那里找出答案。