Название: QThread и QStringList Отправлено: debiannuser от Декабрь 18, 2013, 15:06 Добрый день, такая проблемка, запускаю несколько одинаковых потоков, которые в конструкторе получают указатель на QStrinigList и в перегруженной функции void run() читают этот QStringList, выводя в qDebug() результат, сначала все идет нормально, потом программа вылеает, помогите понять, пожалуйста, почему?
class Check : public QThread { QStringList* proxyList; QMutex mutex; public: Check(QStringList* p) : proxyList(p) {} void run() { while (proxyList->size() > 0) { QString proxy = ""; mutex.lock(); if (proxyList->size() > 0) proxy = proxyList->front(); mutex.unlock(); QString host = proxy.split(":").at(0); int port = proxy.split(":").at(1).toInt(); qDebug() << "Addr: " << host << " : " << port; mutex.lock(); QTest::qSleep(1000); mutex.unlock(); mutex.lock(); proxyList->pop_front(); mutex.unlock(); } } }; Самое непонятное, если я убираю "QTest::qSleep(1000);", то все работает, и выводятся все строчки из QStringList Создаю список с потокам и запускаю их так: QStringList plist = VK::loadData("proxy.txt"); QList<Check*> tlist; if (QFile::exists("proxy.txt")) { for (int i = 0; i < 5; ++i) { tlist.push_back(new Check(&plist)); } for (QList<Check*>::Iterator it = tlist.begin(); it != tlist.end(); ++it) { (*it)->start(); QTest::qSleep(100); } } else qDebug() << "[-] No proxy file"; Название: Re: QThread и QStringList Отправлено: Alex Custov от Декабрь 18, 2013, 15:12 у тебя в каждом потоке свой mutex. Как не сложно догадаться, толку от этого никакого. Используй один глобальный mutex или объяви его статическим. И не используй мьютексы на каждый чих, это довольно дорогая операция.
Название: Re: QThread и QStringList Отправлено: debiannuser от Декабрь 18, 2013, 15:18 Спасибо за совет, про mutex'ы учту, а глобальным делал его, эффект к сожалению тот же
Название: Re: QThread и QStringList Отправлено: Old от Декабрь 18, 2013, 15:36 Спасибо за совет, про mutex'ы учту, а глобальным делал его, эффект к сожалению тот же Посмотрите на QtConcurrent. Это избавит вас от низкоуровневых вещей и поможет сосредоточиться на задаче.Название: Re: QThread и QStringList Отправлено: debiannuser от Декабрь 18, 2013, 15:45 Все, понял в чем дело, тот QStringList, что передавался потокам в качестве аргумента конструктора был локальным! То есть как цикл завершался, переменная удалялась, вот и вылетало, как то так)) Но всеравно спасибо, особенно за QtConcurrent
Название: Re: QThread и QStringList Отправлено: VPS от Декабрь 18, 2013, 16:00 Могу ошибаться, но на мой взгляд, в Вашем коде всё равно могут быть проблемы (не считая локального мьютекса), например вот тут:
Код: mutex.lock(); Название: cialis generica Отправлено: jewawaiblegen от Декабрь 18, 2013, 21:02 <center><a href=http://edmedrx.com/><img>http://shoprxmed.com/dorimg/cialis_fr.jpg</img></a></center>
CLICK HERE http://edmedrx.com/ (copy and paste the link into your browser if link is not clickable) cialis pastillas para la ereccion propecia gratis propecia efectividad medicamento comprar propecia levitra uso recreativo viagra no hace efecto viagra barato madrid conseguir viagra barcelona propecia en espana receta medica tomar cialis es bueno costo cialis 2 5 mg comprar cialis plata propecia contradicciones uso de la viagra cialis afecta el higado viagra espana contrareembolso viagra entregado rapido propecia educacion cialis 20 mg contraindicaciones que es la viagra wikipedia importar priligy priligy riesgos para que sirve el viagra yahoo respuestas compro viagra en valencia como conseguir viagra en madrid priligy y epilepsia comprar cialis almeria propiedades del propecia tomar viagra propecia ancianos mejor cialis o viagra cialis es con receta viagra venta libre cordoba levitra accion cialis comprar andorra comprobar con propecia cialis farmacia espana propecia tu retrato propecia espalnds bueno propecia acidos propecia o proscar viagra sin receta en sevilla jalea comprar kamagra priligy capsulas cialis fertilidad cialis generico en el df cialis generico en farmacias espanolas comprar cialis andorra online comprar levitra cialis viagra fiable viagra 25 mg dosis viagra uso viagra a los 17 anos pastillas cialis 20 mg cialis levitra yahoo cialis precio oficial en farmacia propecia espana finasteride 1mg precio viagra autentica resultados de propecia kamagra sintomas tomar viagra medicamentos propecia produce esterilidad servicio propecia cialis efectos secundarios fotos medicamento llamado cialis cialis precio farmacia benavides kamagra crema viagra eyaculacion viagra cialis levitra comparacion levitra precio espana viagra a los 40 anos costo viagra 50 mg in farmacia viagra y cerveza costo viagra generico cialis precio en espana comprar viagra sin receta en sevilla cialis en tenerife propecia diccionario generico viagra eu como se toma la viagra cialis de 20 mg pastilla cialis alcohol medicamentos cialis donde comprar cialis precio el cialis sirve para la mujer efectos secundarios cialis yahoo cialis 20 en madrid viagra se baja viagra a vendre Название: Re: QThread и QStringList Отправлено: Igors от Декабрь 19, 2013, 11:07 Пользуйтесь тегом для оформления кода
while (proxyList->size() > 0) { Пусть есть 2 рабочих нитки, а главная положила в proxyList эл-т. Тогда обе рабочих схватят этот эл-т (один и тот же) и будут его обрабатывать. Более того, они будут хватать его снова и снова - ведь то что эл-т обработан нигде не фиксируется.QString proxy = ""; mutex.lock(); if (proxyList->size() > 0) proxy = proxyList->front(); mutex.unlock(); Нужно добавить "синхронизацию", обычно используют QWaitCondition или QSemaphore (последний значительно проще) Посмотрите на QtConcurrent. Это избавит вас от низкоуровневых вещей и поможет сосредоточиться на задаче. Возможно и избавит, но понимания основ "многопоточного программирования" не добавитНазвание: Re: QThread и QStringList Отправлено: Old от Декабрь 19, 2013, 11:23 Возможно и избавит, но понимания основ "многопоточного программирования" не добавит А нужны они эти основы топикстартеру? :)Вот вы даже с С++ до конца разобраться не хотите/можете и ничего, не переживаете. Еще и других отговариваете. :) А основы эти со временем/пониманием освоятся... Ничего там сложного нет. Название: Re: QThread и QStringList Отправлено: Igors от Декабрь 19, 2013, 12:07 Вот вы даже с С++ до конца разобраться не хотите/можете и ничего, не переживаете. Еще и других отговариваете. :) Это кого ж я тут "оговорил"? :) И вообще чего это Вас так распирает от желания покричать типа "смотрите, он этого не знает!!! А вот Я, Я знаю!!!" :) Поверьте, пройдет не так уж много времени и то чем Вы сейчас гордитесь покажется Вам довольно мелким. C'est la vie А может есть желание показать себя на деле? Так я могу подкинуть задачку на multi-thread, у меня их полно, Вы только скажите :) Название: Re: QThread и QStringList Отправлено: Old от Декабрь 19, 2013, 13:17 Это кого ж я тут "оговорил"? :) оТговорил. Это важно. И вообще чего это Вас так распирает от желания покричать типа "смотрите, он этого не знает!!! А вот Я, Я знаю!!!" :) Заметьте, я нигде не кричу о том, что знаю. А вы постоянно кричите о том, что вы не знаете и постоянно рекомендуете другим это не изучать. По моему, это плохо.Поверьте, пройдет не так уж много времени и то чем Вы сейчас гордитесь покажется Вам довольно мелким. C'est la vie Пройдет совсем немного времени и у вас не останется никаких актуальных знаний. Поверьте, это вас должно беспокоить больше. И как мне кажется уже беспокоит. ;)А может есть желание показать себя на деле? Так я могу подкинуть задачку на multi-thread, у меня их полно, Вы только скажите :) Ага, подкидывать вы горазды, но лучше вначале научиться их решать самому. :)А темы multi-thread мы с вами уже не раз обсуждали. Скучновато. Название: Re: QThread и QStringList Отправлено: Igors от Декабрь 19, 2013, 14:17 Пройдет совсем немного времени и у вас не останется никаких актуальных знаний. Поверьте, это вас должно беспокоить больше. И как мне кажется уже беспокоит. ;) Отнюдь :) Изучение "всего модного" приносит больше вреда чем пользыАга, подкидывать вы горазды, но лучше вначале научиться их решать самому. :) Ага, то есть каждую задачу "надо знать как решать". Проще говоря, найти и запомнить (заметим - часто найденное просто неверно). Но какой интерес в обсуждении запомненного? Выяснить кто же больше запомнил? Да конечно Вы, с удовольствием отдаю Вам эту печальную "пальму первенства".Вообще если человек не создает тем - верный признак что дуст (или др "изучение") нашло свою жертву. Он уже все постиг, все умеет :) Ну ладно, не надо так не надо Название: Re: QThread и QStringList Отправлено: Old от Декабрь 19, 2013, 14:26 Отнюдь :) Изучение "всего модного" приносит больше вреда чем пользы Глупости. Вспоминается 18 век, в котором "все что надо уже было придумано". Золотой век.Правда, после паровых двигателей мы дошли до атомных станций... В общем один вред. :) Ага, то есть каждую задачу "надо знать как решать". Проще говоря, найти и запомнить (заметим - часто найденное просто неверно). Из чего это следует? :)Более того, это бред. Если бы все решения уже были, нам бы нечего было делать. Но какой интерес в обсуждении запомненного? Не знаю. Это вы обсуждаете, вам виднее.Вообще если человек не создает тем - верный признак что дуст (или др "изучение") нашло свою жертву. Он уже все постиг, все умеет :) Логику, я смотрю, вы тоже не изучали. :) |