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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> threads, нехватает памяти 
V
    Опции темы
xvr
Дата 7.12.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Artemon @ 7.12.2007,  13:25)
Код моего приложения примерно следующий:

Код


void MyFunc(void* Data)
{

  C1* p = (C1*)Data;
  delte p;
}

calss C1
{
public:
         C1(){ create_thread(...MyFunc, this...) }
};


int main()
{
  C1* val = NULL;

  for( int k = 0; k < 300; k ++ )
      {
       val = new C1();
       Sleep(1000); 
      }

  return 0;
}

Про create_thread попдробнее. Что вызывается и с какими параметрами?

PM MAIL   Вверх
Artemon
Дата 7.12.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



Особых настроек здесь нет, только переменная для ID потока и собственно функция потока.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
xvr
Дата 7.12.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Artemon @ 7.12.2007,  14:51)
Особых настроек здесь нет, только переменная для ID потока и собственно функция потока.

Код

$ man create_thread 
No manual entry for create_thread

Как ДОСЛОВНО называлась (и вызывалась) функция запуска thread'а ?

PM MAIL   Вверх
Artemon
Дата 7.12.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



result = pthread_create(&tid, NULL, NetThread, (void*)this);


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
bsa
Дата 7.12.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Artemon, а где pthread_join?
PM   Вверх
vinick
Дата 7.12.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Artemon,  Потоки надо либо ловить с помощью pthread_join, либо отсоединять. Иначе все ресурсы занятые потоком не освобождаются после его завершения.

В вашем коде проще всего отсоединять потоки.
1. 
Либо сразу после создания
Код

result = pthread_create(&tid, NULL, NetThread, (void*)this);  
pthread_detach(tid);


2. 
Либо используя аттрибут PTHREAD_CREATE_DETACHED
Код

void MyFunc(void* Data)
{
  C1* p = (C1*)Data;
  delte p;
}
calss C1
{
public:
         C1(const pthread_attr_t * attr){pthread_t tid; pthread_create(&tid,attr,MyFunc, this); }
};
int main()
{
  C1* val = NULL;
  pthread_attr_t attr;
  pthread_attr_init(&attr);
  pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACH);
  for( int k = 0; k < 300; k ++ )
      {
       val = new C1(&attr);
       Sleep(1000); 
      }
  return 0;
}

PM MAIL ICQ Jabber   Вверх
Artemon
Дата 19.12.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



Всем спасибо, задача разрешилась.
Особое спасибо vinickУ



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

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

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


 




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


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

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