Как заставить сон или любой другой тип таймера для выполнения в определенное время в C ++? - PullRequest
0 голосов
/ 02 июня 2011

Я занимаюсь программированием сокетов в 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
}

Таким образом, в основном процесс отправит данные всем соседям и перейдет в режим сна.Здесь происходит то, что процесс отправляет данные первому соседу, а затем спит в течение 30 секунд.Как заставить процесс завершить отправку и затем выполнить оператор sleep(30).

Я использую разветвление для процесса.И приведенный выше код является частью дочернего процесса.

Ответы [ 3 ]

0 голосов
/ 02 июня 2011

Кажется, вы пытаетесь использовать функцию send с протоколом udp.Это неверно.используйте sendto

0 голосов
/ 02 июня 2011

Вы печатаете сообщения в буферизованный стандартный поток вывода. Может быть, ваши сообщения находятся в буфере, пока вы не напечатаете \ n через 30 секунд? Попробуйте использовать cerr вместо cout. Или сделать флеш.

0 голосов
/ 02 июня 2011

Я могу только догадываться, в чем проблема (пожалуйста, добавьте создание дочернего кода для проверки), я думаю, что когда этот код выполняется первым дочерним элементом, число соседей равно 0, а во втором число будет равно 1,и так далее.В начале я попытался бы поспать, чтобы у других детей было достаточно времени, чтобы разветвиться перед отправкой всех сообщений.

...