При отладке с помощью GDB таймер posix 1 мс не рассчитан правильно - PullRequest
1 голос
/ 22 мая 2019

Я написал тестовую программу, которая создала posix-таймер на 1 мс. При запуске программы в одиночку или отладке с помощью GDB время является точным.Затем я помещаю тестовую программу в код своего проекта. Когда я запускаю свою проектную программу, таймер также точен, но если я отлаживаю свой проект с помощью GDB, таймер не синхронизируется правильно.

#include <stdio.h>
#include <signal.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define CLOCKID CLOCK_REALTIME

timer_t timer_id;

int timer_thread_cnt = 0;
void timer_thread(union sigval v)
{
    timer_thread_cnt++;
    printf("timer thread count <%d>\n", timer_thread_cnt);
}

int start_timer(void)
{
    struct sigevent evp;
    int ret;

    memset(&evp, 0, sizeof(struct sigevent));
    evp.sigev_value.sival_int = 111; /* it can be passed into callback */
    evp.sigev_notify = SIGEV_THREAD; /* The thread notifying way -- dispatch a new thread. */
    evp.sigev_notify_function = &timer_thread; /* The thread address */

    if (timer_create(CLOCKID, &evp, &timer_id) == 0) { /* create timer */
        struct itimerspec it;

        it.it_interval.tv_sec = 0;
        it.it_interval.tv_nsec = 1000000;
        it.it_value.tv_sec = 0;
        it.it_value.tv_nsec = 1000000;

        printf("timer start...");
        if (timer_settime(timer_id, 0, &it, NULL) == -1) { /* if timer create success, start it */
            printf("start timer failed!\n");
            if (timer_delete(timer_id) == -1) {
                printf("timer delete failed!\n");
            }
            return -1;
        }
    } else {
        printf("fail to timer_create");
        return -1;
    }

    return 0;
}

int main(void)
{
    start_timer();
    while(1){
        sleep(1);
    }
}

Если таймер не настроен правильно, после запуска программы в течение 10 секунд значение переменной timer_thread_cnt в программе составляет около 2000. Кстати, если время составляет 10 мс, проблем не будет.Кто-нибудь знает, какова возможная причина этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...