C++ 如何在c+中强制睡眠或任何其他类型的计时器在特定时间执行+;?
我正在用C++ 如何在c+中强制睡眠或任何其他类型的计时器在特定时间执行+;?,c++,sockets,udp,posix,C++,Sockets,Udp,Posix,我正在用C进行套接字编程,我想做以下事情: pid = fork(); if(pid == 0){ //child process for(int m=0;m<2;m++){ j=0; for(i=0;i<len_neighbors;i++){ socket_des1[i] = get_socket_connection_client(hostname1, neighbor_socket[i],(char *)
C
进行套接字编程,我想做以下事情:
pid = fork();
if(pid == 0){
//child process
for(int m=0;m<2;m++){
j=0;
for(i=0;i<len_neighbors;i++){
socket_des1[i] = get_socket_connection_client(hostname1, neighbor_socket[i],(char *) "udp");
//sending data to other routers
cout<<"\nMessage: Sending routing table to neighbor, "<<neighbors[i];
if (send(socket_des1[i], &message1[0], message1.length(), 0) < 0){
perror("\nError:Message sending failed\n");
exit(1);
}
j++;
}
for(i=0;i<len_neighbors;i++){
close(socket_des1[i]);
}
sleep(30);
cout<<"Hello";
}
}else{
// code for parent process
}
pid=fork();
如果(pid==0){
//子进程
对于(int m=0;m我只能猜测问题出在哪里(请添加子代码创建以进行检查),我认为当此代码由第一个子代执行时,邻居的数量为0,第二个子代的数量为1,依此类推。我会在开始时尝试睡眠,以便让其他子代有足够的时间在发送所有消息之前进行分叉。似乎您尝试使用udp协议的发送功能。这是错误的。请使用sendto您正在将消息打印到缓冲的标准输出流。在延迟30秒后打印之前,您的消息可能一直在缓冲区中?
尝试使用cerr而不是cout.或do flush。我已经编辑了代码。我只有一个孩子可以循环并向所有邻居发送消息。我在代码中没有发现任何问题,您确定邻居数组已正确填充吗?并且len_neights的编号正确吗?是的,因此len_neights是2,并且已正确填充。问题是它在30秒后调用第二个邻居发送函数。那么我如何阻止睡眠函数获得控制。@Pruthvid。如果len_neigbors真的是2,并且向第二个邻居的发送在30秒后发生,那么第二次发送一定会失败,因为您已经关闭了通过循环的第一条路径中的套接字。@Lou关闭在t之外他循环。@Pruthvid你是在告诉我“消息:发送路由表给邻居”是在第一张30秒后打印的吗?你有4张还是只有2张?