私のプログラム(while(1)...select()
)のメインループをboost::asio::io_service.run()
に置き換えようとしています。 プログラムにはselect()によって監視されたいくつかのソケットがオープンしています。select()をboost :: asio :: io_serviceに置き換える
selectステートメントのFD_SETには、ソケットファイル記述子とcharデバイス記述子(ハードウェア入力用)があります。前のコードでは、int fd = open("/dev/button1", O_RDONLY);
を呼び出すだけで十分で、fdがFD_SETに追加されました。 select()
ステートメントは、それらのすべてを監視することができます。
文字デバイスをboost::asio::io_service
から監視できるように、私はboost::asio::stream_descriptor
について多くのことを読んできました。しかし、私はそれを働かせることができませんでした。
通常はデバイスを開いてから、stream_descriptorを作成してioserviceに追加しようとしました。
int fd = open("/dev/button1", O_RDONLY);
boost::asio::posix::stream_descriptor btn(io_service, fd);
boost::asio::async_read(btn, buffer, &button_callback);
ただし、これは機能しません。
があなたの代わりにSELECT' 'の[世論調査(2)](http://man7.org/linux/man-pages/man2/poll.2.html)を使用することを検討していました呼び出す方法
注意? –
async_readが実際に(io_serviceが実行されているとき)ジョブを実行する前に 'btn'が直接スコープから外れてしまい、それが破壊され、コールバックが呼び出されませんでしたか?私たちは推測することができます、表示されたコードは大丈夫です、エラーは他のどこかにありそうです。 – Matthias247