26 Апрель, 2024, 02:39:59
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
English
Russian
Сайт СВД ВС
Начало
Помощь
Поиск
Войти
Регистрация
Официальный форум СВД Встраиваемые Системы
>
Форум СВД ВС
>
Техническая поддержка
(Модератор:
Андрей Сеньков
) >
sleep() в многопоточном приложении
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: sleep() в многопоточном приложении (Прочитано 1632 раз)
pshenola
Интересующийся
Сообщений: 7
sleep() в многопоточном приложении
«
:
11 Октябрь, 2013, 15:01:01 »
В многопоточном приложении sleep(delay) по завершении не освобождает таймер. Поэтому приложение работает корректно до тех пор, пока не исчерпано допустимое число таймеров в системе. После этого sleep() возвращает свой аргумент вместо 0, не срабатывая.
Запустив прилагаемый тест, в этом можно убедиться просматривая по vsin активные таймеры.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
#include <process.h>
#include <unistd.h>
#include <i86.h>
void tst(void *b)
{
int conn=-1, ret;
ret = (int) b;
while(conn<0) {
ret = sleep(30);
printf("now=%i ret sleep = %i Їа®ўҐаЄ в ©¬ гв \n", time(0), ret);
fflush(stdout);
}
}
main()
{
int i;
for(i=0; i<4; i++) {
_beginthread(tst, NULL, 0x1000, 0);
}
while(1) {
i = delay(1000);
printf("now=%i ret delay = %i \n", time(0), i);
fflush(stdout);
}
}
Можно ли это обойти, не используя функции timer*?
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1076
sleep() в многопоточном приложении
«
Ответ #1 :
11 Октябрь, 2013, 16:05:27 »
В QNX 4.25 функция sleep()/delay() не потоко-безопасная. А почему, собственно, функции семейства timer_*() не подходят?
«
Последнее редактирование: 11 Октябрь, 2013, 16:09:10 от Андрей Докучаев
»
Записан
pshenola
Интересующийся
Сообщений: 7
sleep() в многопоточном приложении
«
Ответ #2 :
14 Октябрь, 2013, 10:40:16 »
Спасибо, Андрей!
Просто хотелось покороче, не рассчитывала, что так все запущено...
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1076
sleep() в многопоточном приложении
«
Ответ #3 :
14 Октябрь, 2013, 13:52:43 »
Цитата: pshenola от 14 Октябрь, 2013, 10:40:16
Спасибо, Андрей!
Просто хотелось покороче, не рассчитывала, что так все запущено...
Справедливости ради необходимо отметить, что потоки в QNX 4.25 в полной мере не реализованы. Отсюда и существенные ограничения по работе с ними.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Форум СВД ВС
-----------------------------
=> Информация
=> Техническая поддержка
=> Программное обеспечение
=> Инструментальные средства
=> Обсуждение сайта
=> Курилка
-----------------------------
International Forum
-----------------------------
=> English Discussion
Загружается...