Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中强制睡眠或任何其他类型的计时器在特定时间执行+;?_C++_Sockets_Udp_Posix - Fatal编程技术网

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张?