私は、絡み合わなければならないライブラリの構造に少し戸惑っています。このコンストラクトにいくつかのタイマーを導入するには、助けが必要です。
私は次のものを持っています:
- com.hppを
main
含むcom.cpp - host.hと必要なブーストを含むcom.hppには、クラスcomClientが含まれ、定義されています。
- host.hを含むhost.c
- com.hppが含まれているwrapper.cppと、いくつかの必要なブースト インクルード
現在、私のcom.cppはcomClientを作成しており、それを com ポートでの非同期通信に使用しています。とを使用boost::asio::serial_port
しboost::asio::io_service
ます。
パケットの送信に時間がかかりすぎたときにキャッチするために、いくつかのタイマーを使用する必要があります。
comClientのインスタンスを作成するときは、パケットタイマーを初期化する必要があります。
comClientasynch_read_some
のプライベート関数を使用して、 comClientのプライベート ハンドラーを呼び出します。次に、このハンドラーがhost.cの関数を呼び出します。このハンドラーは、タイマーを再起動する関数であるwrapper.cppを呼び出します。
これは、タイマーを開始する関数です。
//wrapper.cpp
void IniPacketTimer(void *pCHandle){
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::milliseconds(25));
t.async_wait(&hostOnTimeout(pCHandle));
io.run();
}
これは、要するにコマンド チェーンです。
//comClient.cpp
main{
comClient cc();
}
//comClient.hpp
class comClient(boost::asio::io_service& io_service){
comClient(){
hostInit();
aread();
}
private:
aread( call aread_done)
areaddone(call hostNewData())
}
//host.c
hostInit(){
IniPacketTimer()
}
hostNewData(){
resetTimer
}
//wrapper.cpp
resetTimer(){
t.expires_from_now
}
質問:
シリアル ポートでの非同期読み取り/書き込み操作には影響しないが、期限に達したときに関数の実行をトリガーする非同期タイマーを提供するにはどうすればよいですか?
既存のものを使用するio_service
必要がありますか、それとも別のものを作成するだけで問題ありませんか?
C2102 '&' Expects L-Value for my line というエラーが表示されるのはなぜt.async_wait
ですか?