【发布时间】:2015-10-29 09:27:34
【问题描述】:
假设我们需要在两台电脑 A 和 B 之间使用 UDP 协议发送这条消息Hellow World。计算机 A 会将消息发送到 B,并有一定的时间延迟(即恒定或随时间变化)。现在为了模拟这种情况,我的第一次尝试是使用sleep 函数,但这个解决方案会冻结整个应用程序。另一种解决方案是实现多线程并将sleep()与负责获取数据的线程一起使用并将其存储在全局变量中并从另一个线程访问该变量。在此解决方案中,线程之间的同步可能存在困难。为了克服这个问题,我将接收到的数据写入 txt 文件并从另一个线程读取。 我的问题是进行这个微不足道的实验的正确方法是什么?如果答案有一些 C++ 伪代码,我将不胜感激。
编辑:
我的解决方法如下,对于Master端(客户端),
Master masterObj
int main()
{
masterObj.initialize();
masterObj.connect();
while( masterObj.isConnected() == true ){
get currentTime and data; // currentTime here is sendTime
datagram = currentTime + data;
masterObj.send( datagram );
}
}
对于Slave端(服务器),伪代码为
Slave slaveObj
int main()
{
slaveObj.initialize();
slaveObj.connect();
slaveObj.slaveThreadInit();
while( slaveObj.isConnected() == true ){
slaveObj.getData();
}
}
Slave::recieve()
{
get currentTime and call it recievedTime
get datagram from Master;
this->slaveThread( recievedTime + datagram );
}
Slave::slaveThread( info )
{
sleep( 1 msec );
info = recievedTime + datagram ;
get time delay;
time delay = sendTime - recievedTime;
extract data from datagram;
insert data and time delay in txt file ( call it txtSlaveData);
}
Slave::getData()
{
read from txtSlaveData;
}
如您所见,我使用了一个独立的线程,在其中我使用的是sleep()。我不确定这种方法是否适用。
【问题讨论】:
-
@EdHeal,不完全是。在这里,我问的是模拟客户端和服务器之间的时间延迟,但我没有问任何工具,如您发布的链接中的情况。基本上我正在寻找一个 C++ 伪。
标签: c++ delay simulation