crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Ошибка из потока
ruzik
  опции профиля:
сообщение 26.7.2011, 20:36
Сообщение #1


Активный участник
***

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

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




Репутация:   0  


Здравствуйте, я хотел для своего редактора qss сделать небольшой поиск ошибок, но тк он выполнялся достаточно долго при больших документов, я запихнул его в поток, вроде все ок, все работает, но если попытаться выйти из программы, то выдает ошибку:
Цитата
Необработанное исключение в "0x651ed4d5" в "RizekQssEditor.exe": 0xC0000005: Нарушение прав доступа при чтении "0x01926158".

Я понимаю поток пытается обратиться к данным, которых уже нет, и я пытался это исправить:
поставил обработку исключений в место создания потока и некоторых начальных манипуляций с ним - не помогло
поставил обработку исключений в сам поток, в функции манипуляции с теми самими объектами - не помогло
поставил завершение процесса и в деструктор QDockWidgetа в котором содержится этот поток и в главный класс - не могло
Вот как примерно выглядит класс QDockWidget из которого и вызывается поток
#include "searchMistakes.h"
#include "QString"
#include "searchMistakeThread/searchMistakeThread.h"
#include "rizekqsseditor.h"

#include "QDebug"

searchMistakes::searchMistakes(QWidget *parent, Qt::WFlags flags)
: QDockWidget(parent, flags)
{
    thread = new searchMistakesThread;
}

searchMistakes::~searchMistakes()
{
    thread->quit();
}
void searchMistakes::findMistakes()
{
    try
    {
        thread->quit();
        thread->setObjects(plainTextEdit,listWidget,rqe->getOutputWindow());
        thread->setKindOfSearch(2);
        thread->start();
        connect(thread, SIGNAL(finished()), thread, SLOT(quit()));
    }
    catch(...)
    {
        qDebug() << "Error";
    }
}

Заранее спасибо за помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.7.2011, 21:49
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(ruzik @ 26.7.2011, 23:36) *
Я понимаю поток пытается обратиться к данным, которых уже нет
а как ты это понимаешь? Воспользуйся отладчиком, и посмотри цепочку вызовов при аварийном завершении программы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 26.7.2011, 22:31
Сообщение #3


Активный участник
***

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

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




Репутация:   0  


Знал бы как, посмотрел бы :)
Не подскажите как это можно сделать в VS 2008

Нашел как, зашел в debug, при запуске ошибка
http://hostingkartinok.com/image/01201107/...d812a4f4929.png
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.7.2011, 5:48
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Это сообщение означает, что где-то идёт обращение к экземпляру QAplication вне главного потока.

Если ты отлаживаешся в IDE, то там должен быть стек вызовов, посмотри его, от какой из твоих функций начинается этот стэк
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 27.7.2011, 12:19
Сообщение #5


Активный участник
***

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

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




Репутация:   0  


Остановил во время выхода errora на отладке:
В стеке вызовов:
http://hostingkartinok.com/image/01201107/...973a56b6432.png
+ qglobal.cpp , следующий оператор, который должен выполниться
template <typename Wrapper> static inline typename Wrapper::pointer qGetPtrHelper(const Wrapper &p) { return p.data(); }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.12.2024, 0:29