Хотите реализовать время ожидания для одной функции в C - PullRequest
6 голосов
/ 31 января 2012

Здесь у меня есть одна функция - режим прослушивания. эта функция перечисляет что-то, что я получил от какого-то устройства.

Здесь, когда моя функция находится в режиме прослушивания, я хочу создать тайм-аут. если я не получу никакого ответа от определенного устройства, то я хочу выйти из этой функции и должен уведомить.

если в течение этого периода времени, если я получу ответ от устройства, мне придется продолжить работу и остановить этот тайм-аут, и нет никаких ограничений для завершения этой работы в любое время.

Так, как я могу реализовать эту вещь для функции.

Любое тело, пожалуйста, помогите мне реализовать эту функцию с функцией тайм-аута.

Ответы [ 2 ]

3 голосов
/ 31 января 2012

В зависимости от того, как вы ждете ответа от этого устройства, ответ на ваш вопрос будет разным.Базовая структура:

int do_something_with_device()
{
    if (!wait_for_response_from_device()) {
        return TIMEOUT_ERROR;
    }
    // continue with processing
}

Что касается реализации wait_for_response_from_device(), то каждое устройство отличается.Если вы используете розетки или трубы, используйте select().Если вы взаимодействуете с чем-то, что требует цикла ожидания ожидания, это может выглядеть следующим образом:

int wait_for_response_from_device()
{
    time_t start = time(NULL);
    while (time(NULL) - start < TIMEOUT) {
        if (check_device_ready()) {
            return 1;
        }
    }
    return 0;
}

Естественно, реализация check_device_ready() будет зависеть от вас.

2 голосов
/ 31 января 2012

Взгляните на man 2 alarm. Вы можете установить или отключить сигналы, которые будут отправлены вашему приложению по истечении определенного периода времени.

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