如何强制睡眠或任何其他类型的计时器在c ++中的特定时间执行?

时间:2011-06-01 20:16:53

标签: 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 *) "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
}

所以基本上这个过程会将数据发送给所有邻居和goto睡眠。这里发生的是进程将数据发送到第一个邻居然后休眠30秒。如何强制进程完成发送,然后执行sleep(30)语句。

我正在使用forking进程。上面的代码是子进程的一部分。

3 个答案:

答案 0 :(得分:0)

我只能猜出是什么问题(请添加子代码创建来检查),我认为当第一个子代码执行此代码时,邻居的数量为0,第二个数字为1,等等。我会在开始时尝试睡眠,这样就可以在发送所有信息之前为其他孩子提供足够的时间来分叉。

答案 1 :(得分:0)

您似乎尝试使用udp协议的send函数。这是错误的。使用sendto

答案 2 :(得分:0)

您正在将消息打印到缓冲的标准输出流。也许你的消息在缓冲区中,直到你延迟30秒后打印? 尝试使用cerr而不是cout。或者冲洗。