使用 RubyFFI 从 ruby 停止具有无限循环的 c 函数
Stop a c function with infinite loop from ruby using RubyFFI
以下是我的场景,
- 我使用 Ruby FFI
从 Ruby 调用一个名为 'subscribe' 的 c 函数
- 子函数在while循环中无限运行
- 我需要一种方法来停止来自 Ruby 的订阅(需要停止无限运行的 c 函数)
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 什么?)并从那里找出答案。
以下是我的场景,
- 我使用 Ruby FFI 从 Ruby 调用一个名为 'subscribe' 的 c 函数
- 子函数在while循环中无限运行
- 我需要一种方法来停止来自 Ruby 的订阅(需要停止无限运行的 c 函数)
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 什么?)并从那里找出答案。