我有类似的代码(非常简化):
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),它只会继续等待,如有必要,永远等待......这就是为什么我试图围绕它建立超时。