crossplatform.ru

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


  Ответ в Падает программа (сигналы и слоты)
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 18.1.2012, 22:52
 
Цитата(medhaid @ 18.1.2012, 23:42) *
P.S. насчёт оптимизации, я просто разбираюсь... как бы такой задачи нет...

это всегда надо иметь в виду. когда программист не думает о том, какие ресурсы сожрёт его софтина, потом получаются всякие нехорошие вещи :) из решения мелких задач складывается опыт программирования. чем больше опыта - тем быстрее и лучше программист справляется с задачами.
medhaid Дата 18.1.2012, 20:42
  ага, переполнение стека) ток вчера въехал почему.....
я думал что сигнал запомниться в очередь а потом по выходу из деструктора выполниться... как бы не какой рекурсии...

как вычитал в boost signal вызов прямой сразу...
а вот в signal2 вызов через очереди.. и с ними мой пример(в теории, пока не проверил) отработал бы нормально..

Спасибо, за подсказку.



P.S. насчёт оптимизации, я просто разбираюсь... как бы такой задачи нет...
Алексей1153 Дата 18.1.2012, 7:36
  можно организовать в классЕ статический массив-дерево. Тогда обход дерева можно будет в цикле делать, а не загружать стек рекурсией
Iron Bug Дата 17.1.2012, 23:37
  chkstk.asm - проблемы со стеком. он тупо переполняется.
увеличивай стек. но это нехорошая тенденция - увеличивать стек, если количество переменных и глубина цепочки вызовов может меняться. лучше подумать об оптимизации.
medhaid Дата 17.1.2012, 22:33
  Здравствуйте,
В этот раз сам разобраться не смог....

написал небольшой пример использования сигналов и слотов....
в нём создаются элементы, и каждый последующий следит за преведущим, если последний созданный элемент удалить, то по цепочке удаляться все остальные

#include <boost/signal.hpp>
#include <boost/bind.hpp>
#include <iostream>

int count = 0;

//===============================класс в котором возникает событие==========
class ObJEcT//: public boost::signals::trackable
{
public:
    ObJEcT()
    {
        count++;
    }

    ObJEcT(ObJEcT *obj)
    {
        count++;
        this->connectOnDestroy(boost::bind(&ObJEcT::destroy, obj));
    }

    ~ObJEcT()
    {
        count--;
        std::cout << "~ " << count<< std::endl;
        onDestroy(); //при удаление сообшяем всем кто слушает
    }

    void destroy()
    {
        delete this;
    }

    //возрашяет ссылку на сигнал.. для отмены если чё..
    void connectOnDestroy(boost::function<void()> slot) 
    {
        onDestroy.connect(slot);
    }

private:
    boost::signal<void (void)> onDestroy;
};


int main()
{
    
    ObJEcT *tmp = new ObJEcT();
    for (int i = 0; i < 232; i++) // 232 отрабатывает нормально если выше то програма вылетает
    {
        tmp = new ObJEcT(tmp);
    }
    delete tmp;

    system("pause");

    return 0;
}


при количестве объектов меньше 233 всё работает нормально, если свыше то программа вылетает ссылаясь на какой-то асемблеровский файл chkstk.asm

с чем это связано???)
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 13:56