crossplatform.ru

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

> Падает программа (сигналы и слоты), непонятное исключение
medhaid
  опции профиля:
сообщение 17.1.2012, 22:33
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 13.1.2012
Пользователь №: 3130

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




Репутация:   0  


Здравствуйте,
В этот раз сам разобраться не смог....

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

#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

с чем это связано???)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
medhaid
  опции профиля:
сообщение 18.1.2012, 20:42
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 13.1.2012
Пользователь №: 3130

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




Репутация:   0  


ага, переполнение стека) ток вчера въехал почему.....
я думал что сигнал запомниться в очередь а потом по выходу из деструктора выполниться... как бы не какой рекурсии...

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

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



P.S. насчёт оптимизации, я просто разбираюсь... как бы такой задачи нет...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




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