Официальный форум СВД Встраиваемые Системы
26 Апрель, 2024, 02:39:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: sleep() в многопоточном приложении  (Прочитано 1632 раз)
pshenola
Интересующийся

Сообщений: 7


« : 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



WWW
« Ответ #1 : 11 Октябрь, 2013, 16:05:27 »

В QNX 4.25 функция sleep()/delay() не потоко-безопасная. А почему, собственно, функции семейства timer_*() не подходят?
« Последнее редактирование: 11 Октябрь, 2013, 16:09:10 от Андрей Докучаев » Записан

pshenola
Интересующийся

Сообщений: 7


« Ответ #2 : 14 Октябрь, 2013, 10:40:16 »

Спасибо, Андрей!
Просто хотелось покороче, не рассчитывала, что так все запущено...
Записан
Андрей Докучаев
Сотрудник СВД ВС
Легенда

Сообщений: 1076



WWW
« Ответ #3 : 14 Октябрь, 2013, 13:52:43 »

Спасибо, Андрей!
Просто хотелось покороче, не рассчитывала, что так все запущено...

Справедливости ради необходимо отметить, что потоки в QNX 4.25 в полной мере не реализованы. Отсюда и существенные ограничения по работе с ними.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2024 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 23 Февраль, 2024, 07:14:55