crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> программы при длительной работе вылетают
eldar85
  опции профиля:
сообщение 18.8.2010, 12:56
Сообщение #11


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 18.8.2010, 16:40) Link
сделай так, раз массив не нужен
    Thread *thread = 0;

    for(int i = 0; i < 100; i++)
    {
    thread=new Thread(...указатель на главное окно...);
        connect(thread, SIGNAL(counter()), this, SLOT(lcd()));
        connect(thread, SIGNAL(shovT(QString)), this, SLOT(showT(QString)));

        thread->start();
        Sleep(100);
    }


BRE, очепятка ) Исправил


а таким образом очистка памяти будет производится автоматически?

погоди а так вообще будут запускаться сто потоков? как то не привычно такой вид запуска потоков))) привык уже к массиву)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.8.2010, 13:18
Сообщение #12


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


eldar85, автоматически удалятся вместе с разрушением главного окна.

Что значит - привык ? ) Сформулируй задачу то... Я вижу, что у тебя указатель на массив теряется - значит, он тебе не требуется для дальнейшей работы. А тогда нафиг массив ? Пусть каждый объект создастся
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 18.8.2010, 13:54
Сообщение #13


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


 Thread *thread = new Thread[100];

не пойму чет... вот я создал массив, затем в цикле запускаю каждый элемент массива thread[i].start(); или это не правильно?
я попробывал сделать так

 Thread *thread = 0;

    for(int i = 0; i < 100; i++)
    {
    thread=new Thread(this);
        connect(thread, SIGNAL(counter()), this, SLOT(lcd()));
        connect(thread, SIGNAL(shovT(QString)), this, SLOT(showT(QString)));

        thread->start();
        Sleep(100);
    }

но чет не компилица вообще никак...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.8.2010, 14:00
Сообщение #14


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


а что пишет ? Я не тестировал

Скорее всего, ему параметр не нужен )) Убери (this)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 18.8.2010, 15:09
Сообщение #15


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


программа падает не из-за массива. массив там правильно использован. что не удалялся - это пофиг, при завершении программы система удалит, хотя лучше делать delete[], чисто из джентльменских соображений не оставлять за собой мусора.
чтобы системе на хватило памяти - это маловероятно. на один процесс в 32-битной системе выделяется 4 гига виртуальной памяти. твои сто процессов столько не сожрут.
в принципе, если есть рекурсия - может быть переполнение стека, к примеру. но это тоже редкий случай. скорее всего, в потоках что-то сделано некорректно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.8.2010, 19:10
Сообщение #16


фрилансер
******

Группа: Участник
Сообщений: 2946
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


дык, никто и не говорил, что причина в массиве - это я из соображений об утечках. Код потока автор так и не явил народу ) А рекурсия тоже вряд ли виновата - падало бы мгновенно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 19.8.2010, 20:28
Сообщение #17


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


спасибо за советы, проблема решилась все же засеранием памяти))) сделал удаление в потоках все выделений памяти и пашет)))
там у меня в 100 потоках может выззываться в циклах по 250 000 раз и каждый раз создавая в динамической памяти объект))) в итоге как бы мало этот объект не весил, но если столько раз вызвать все же вылетает))))))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.1.2026, 17:45