2017-02-23 9 views
0

を使用すると、私は、サブ関数はAで無限に実行されるRubyのFFI ストップ交流機能に続きRubyFFI

  • を使用してルビーから「購読」と呼ば交流機能を呼び出す

      1. 、私のシナリオです
      2. 私はルビーからこのサブスクリプションを停止する方法が必要にループしながら、
    01(無限に実行される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

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

    しかし、スレッドはスケジュール可能な実行単位であり、破棄することができます。使用しているスレッドAPIを読んで(おそらくThread.new()コールで何かが返されますか?)、そこからそれを把握する必要があります。

    +0

    ええ、同じ考えがありました。 – Muthukumar