Название: QList<MyTheard> Отправлено: akaMDA от Ноябрь 08, 2010, 16:05 Необходимо сделать QList<MyTheard>. Каждый поток обрабатывает 1 текстовый файл из QStringList strLsFiles. При этом количество текстовых файлов и соответственно элементов-потоков в данном случае неизвестно заранее, а ввожится в процессе работы. Подскажите пожалуйста, каким отбразом можно организовать запуск этих потоков в цикле for. Делаю
Код: for(int i=0; i<strLsFiles->count(); i++){ подскаже как быть! Название: Re: QList<MyTheard> Отправлено: UVV от Ноябрь 08, 2010, 16:55 MyThread::start()
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 08, 2010, 16:59 Да, это я тут описался. Не работает.
Qobject is private Название: Re: QList<MyTheard> Отправлено: Пантер от Ноябрь 08, 2010, 17:12 Код MyTheard приведи.
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 10, 2010, 15:49 Код: /* Компилится и собирается нормально, но при запуске происходит ошибка: Прпкращена работа Сигнатура проблемы: Имя события проблемы: APPCRASH Имя приложения: DataClustering.exe Версия приложения: 0.0.0.0 Отметка времени приложения: 4cda94ab Имя модуля с ошибкой: QtCored4.dll Версия модуля с ошибкой: 4.7.0.0 Отметка времени модуля с ошибкой: 4c8d7577 Код исключения: c0000005 Смещение исключения: 001aea99 Версия ОС: 6.1.7600.2.0.0.768.11 Код языка: 1049 Дополнительные сведения 1: 0a9e Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789 Дополнительные сведения 3: 0a9e Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789 Ознакомьтесь с заявлением о конфиденциальности в Интернете: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419 Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом: C:\windows\system32\ru-RU\erofflps.txt Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 10, 2010, 15:51 В приведенном коде пытаюсь даже не весь список обработать, а только хотя бы первый файл...
Название: Re: QList<MyTheard> Отправлено: Пантер от Ноябрь 10, 2010, 15:54 На какой из этих строк падает?
PreEdit pe(this, strLsFiles->at(0)); pe.start(QThread::IdlePriority); Название: Re: QList<MyTheard> Отправлено: UVV от Ноябрь 10, 2010, 17:00 И правильно делает, что падает, поскольку объект PreEdit должен быть членом класса.
А так, как у тебя сейчас, оно просто уходит за пределы видимости. Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 10, 2010, 22:34 Да, все заработало.
Считывает отлично, но выводит в файл только при QThread::HighestPriority!!! О_О Это с чем связано? Название: Re: QList<MyTheard> Отправлено: UVV от Ноябрь 10, 2010, 23:36 А чего ты хотел добиться, указав QThread::IdlePriority?
Ты вообще assistant читал по этому поводу? Не указывай никаких параметров просто. Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 10, 2010, 23:46 Вообще вот хотел спросить. Пишу щас дипломную работу по теме "Разработка программного комплекса класстеризации текстовой информации на основе нейронных сетей". Естественно в программе есть несколько независимых мест, выполнение которых можно распаралелить. Это например работа каждого нейрона, векторизация текста (это и есть его начало) и т.д. Так имеет ли смысл это превращать в отдельные потоки? Или в данном случае это бессмысленно?
Название: Re: QList<MyTheard> Отправлено: UVV от Ноябрь 10, 2010, 23:54 Про нейронные сети ничего не подскажу (не моя специализация), но распараллеливание на потоки может дать существенный прирост в производительности, когда оно правильно применено. В Qt есть несколько способов распараллелить задачу, потоки - не единственный.
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 11, 2010, 00:05 А какие еще способы в Qt есть?
просто я этой проблемой еще не сталкивался. Вот если все последовательно делать, то корость обработки 1 текста получется выше, чем если распараллелить. Прирост в скорости существенный я думаю будет уже при очень большом количестве входных текстов. А процессы даже QThread::HighestPriority, иногда вообще выпиливаются системой. Так например у меня получилось в какой-то момент времени, что 3 строчки просто перенос без разбора, комп 2 мин делал! Может есть способ в Qt сделать так, чтоб выполняемая задача была на критическом пути у системы и ее ничего не прерывало? Название: Re: QList<MyTheard> Отправлено: UVV от Ноябрь 11, 2010, 00:08 QtConcurrent
Название: Re: QList<MyTheard> Отправлено: BlackTass от Ноябрь 11, 2010, 01:03 Конкаррент не поможет, там те же самые потоки, только обернутые в более простой синтаксис.
Чтобы ничего не прерывало средств не бывает. Пользуйтесь rtos, там возможностей в этом плане побольше. Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 11, 2010, 15:06 а KDE есть на qnx?
Название: Re: QList<MyTheard> Отправлено: BlackTass от Ноябрь 11, 2010, 20:51 Не слышал честно говоря) и не очень уверен что вам нужно оно. Задача не настолько критичная ко времени, чтобы идти на такие меры. Есть подозрение, что у вас проблемы с производительностью из-за самого подхода. Если расскажете поподробнее алгоритм и как вы пытаетесь его распараллелить, то может я или кто другой подскажет как лучше сделать, чтобы работало и на обычных ос
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 13, 2010, 13:27 Да вроде добился уже, что работает.
Но возникла проблема - если 1 поток и чен класса, то работает нормально. При использовании же QList начинает падать, т.к. элементы уходят из зоны видимости. Как ркшить эту проблему? Название: Re: QList<MyTheard> Отправлено: BlackTass от Ноябрь 14, 2010, 13:51 Может стоит привести немного кода, чтобы было понятнее о чем вопрос?
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 14, 2010, 20:03 Код: for(int i = 0; i < strLsFiles.count(); ++i) вот код)) сложность в том, что нада запускать этот цикл не в конструкторе виджета. т.е. конструктор QList запускается раньше. При старт поток падает. Название: Re: QList<MyTheard> Отправлено: BlackTass от Ноябрь 15, 2010, 01:09 Я так понимаю strLsFiles это некая локальная переменная, которая заполняется объектами (не указателями на них)? Покажите заполнение strLsFiles и метод init()
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 15, 2010, 15:25 QStringList strLsFiles - это член-данная класса, в которм запускаются потоки. В ней хранятся адреса текстовых файлов. Но к данной проблеме она отношения не имеет. если объявить несколько объктов не в QList - то работает отлично. Если же объявлять их в QList - падают при запуске метода start. Аналогично,если объект класса-потока объявить в функции. Следовательно при инициализации в QList его элементы выходят за область видимости. Не могу пока решить эту проблему.
Код: #ifndef VECTORINGTEXT_H при вызове старт возникает ошибка - Сигнатура проблемы: Имя события проблемы: APPCRASH Имя приложения: DataClustering.exe Версия приложения: 0.0.0.0 Отметка времени приложения: 4ce12697 Имя модуля с ошибкой: QtCored4.dll Версия модуля с ошибкой: 4.7.0.0 Отметка времени модуля с ошибкой: 4c8d7577 Код исключения: 40000015 Смещение исключения: 0000e680 Версия ОС: 6.1.7600.2.0.0.768.11 Код языка: 1049 Дополнительные сведения 1: 0c46 Дополнительные сведения 2: 0c468683048b9b6a0bbe53bf3a1fd8b9 Дополнительные сведения 3: d6d5 Дополнительные сведения 4: d6d507d9b5ddac7e52e2d5f5e0bb6da2 Ознакомьтесь с заявлением о конфиденциальности в Интернете: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419 Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом: C:\windows\system32\ru-RU\erofflps.txt Название: Re: QList<MyTheard> Отправлено: BlackTass от Ноябрь 15, 2010, 22:47 Ок, а если в дебаге глянуть где падает? Так вроде на первый взгляд ничего криминального нет.
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 15, 2010, 23:05 Так смотрел. Падает на start(). Видимо выходит за область видимости. Видимо объекты QList не становятся членами класса...
Название: Re: QList<MyTheard> Отправлено: BRE от Ноябрь 15, 2010, 23:17 Код
Список ltVT изначально вроде пуст, в него ничего не добавляли, а ты по индексу обращаешься к элементам которых нет. Копировать объекты QObject (и их наследников) нельзя, тем более так как делаешь ты в конструкторе копирования/операторе=. Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 15, 2010, 23:22 Ммм, а как иницировать эти элементы тогда. Сначала пробовал запустить контструктор - но не дает
Название: Re: QList<MyTheard> Отправлено: BRE от Ноябрь 15, 2010, 23:41 Ммм, а как иницировать эти элементы тогда. Сначала пробовал запустить контструктор - но не дает Т.к. копировать объекты классов наследников QObject нельзя, то придется использовать указатели.Код
Название: Re: QList<MyTheard> Отправлено: akaMDA от Ноябрь 16, 2010, 15:18 Код: for(int i = 0; i < strLsFiles.count(); ++i) Во, вот так только)) Спасибо, заработало)) |