私はこれに似たコードを持っています(非常に単純化されています):
char *data, *ack;
...
while (<not done>) {
sendData(data+offset);
receiveACK(ack);
// <<<What I want to do>>>
// if (ack == <bad> || <receiveACK() TIMEOUT>)
// continue;
//
...
offset += SPACING;
}
問題は、sendData() と receiveACK() が、私が使用しなければならないブラック ボックスをブロックしていることです。
私が望むのは、特定の時間枠内に ACK を受信できなかった場合に、同じ入力で sendData() を再度トリガーすることだけです。どうすればいいですか?
注: スレッドはオプションではありません。
編集: sendData() と receiveACK() の背景のビット。彼らはネットワーク通信を行います。sendData() はデータを送信しようとし、機能しない場合は失敗します (ここでは問題ありません)。問題は、反対側では、シーケンスとチェックサムが正しい場合にのみ ACK が送信されることです。つまり、データ エラー => ACK なし。これで receiveACK() はトラフィックを待って解釈します。トラフィックがない場合 (ACK がない場合)、必要に応じて永遠に待機し続けます...そのため、タイムアウトを構築しようとしています。