Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pthread_mutex_timedlock - ожидание в миллисекундах 
V
    Опции темы
vdm
Дата 28.10.2012, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Привет.

Возможно используя ф-цию pthread_mutex_timedlock задать время ожидания в миллисекундах? Если да, тогда как обойти возможное переполнение?
PM MAIL   Вверх
boostcoder
Дата 29.10.2012, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



вопрос какой-то глупый. функция и так принимает время в микросекундах.
в чем вопрос?

PM WWW   Вверх
vdm
Дата 30.10.2012, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Цитата(boostcoder @ 29.10.2012,  13:38)
вопрос какой-то глупый. функция и так принимает время в микросекундах.
в чем вопрос?

Ситуация следующая:

Имеется функция для перекрытия мутекса с ожиданием в миллисекундах. Также в ней присечена возможность переполнения значения timeout.tv_nsec - что за переполнение говорится здесь: читать код возврата EINVAL. Всё бы и ничего, но посмотрев на количество математических вычислений в этой функции, ненароком задумываешся => одни только вычисления чего стоят процессору... а время ожидания иногда требуется указать всего-то 10 миллисекунд...

Вообщем есть идеи как упразднить вычисления и при этом получить тот же результат: время для задержки в миллисекундах с предотвращением переполнения параметра timeout.tv_nsec?

Код
fn (long ms)
{
    int res;
    struct timeval now;
    struct timespec timeout;

    gettimeofday(&now, NULL);
    uint usec = (ms % 1000)*1000 + now.tv_usec;
    timeout.tv_sec = now.tv_sec + ms/1000 + usec/1000000;
    timeout.tv_nsec = (usec % 1000000)*1000;

    res = pthread_mutex_timedlock(&mutex, &timeout);

    if ((ETIMEDOUT != res) && (0 != res))
    {
        // lf error...
    }

    return res;
}

PM MAIL   Вверх
boostcoder
Дата 30.10.2012, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(vdm @  30.10.2012,  01:17 Найти цитируемый пост)
одни только вычисления чего стоят процессору

страшно жить smile 
уверяю Вас, все вычисления в этой функции до вызова pthread_mutex_timedlock(), займут не более 1 мкс. Си, это не php и не ruby ;)

Добавлено @ 08:48
Цитата(boostcoder @  30.10.2012,  08:46 Найти цитируемый пост)
займут не более 1 мкс.

и это с учетом сискола gettimeofday(). без него, и 30 нс. более чем достаточно.


Это сообщение отредактировал(а) boostcoder - 30.10.2012, 08:52
PM WWW   Вверх
vdm
Дата 30.10.2012, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Подумал, может у кого-нибудь возникнет более оптимизированый вариант...

Это сообщение отредактировал(а) vdm - 30.10.2012, 11:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.