スリープする以外に C++ でプログラムを遅延させる別の方法について質問があります。
UDP パケットを受信してコントローラーに送信するプログラムの一部があります。プログラムのこの部分は、非同期で実行する必要があります。このプロバイダーのオーバーヘッドを削減するために、別のスレッドでソケットを監視するのではなく、非同期 IO を使用して UDP パケットを受信することにしました。
これを達成するために、この sigaction の例に従いました。この sigaction がアクティブなときに usleep を使用しようとすると、パケットを受信するたびにスリープが中断されることに気付きました。CPUのスリープを停止する可能性のあるCPU上の何らかの割り込みによってsigactionがトリガーされると想定しているため、この種のことは理にかなっています。なぜこれが起こるのかについて誰かが良い説明を持っているなら、私は知りたいです. 私の問題は、複数のパケットを連続して送信する必要があり、それらを遅延させる必要がある場合があることです。そうしないと、コントローラーがパケットを見逃してしまいます。
私は通常、スリープを使用してパケットの送信を遅らせますが、現在は、sigaction によって壊れているため、できません。ビジーウェイトを使用することも考えましたが、一貫性がなさすぎる可能性があります。タイマーを使用して定期的に空になるパケットのキューを使用することも考えていますが、もっと簡単な解決策があるようです。
スリープ以外にパケットの送信を遅らせる別の方法はありますか? スリープを中断しないように非同期 IO を設定する方法はありますか? 私はこれについて間違った方法で行っていますか?