Russian Qt Forum
Сентябрь 22, 2024, 21:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: (РЕШЕНО) Добавить к консольному окно - путаница в нитях  (Прочитано 5342 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Февраль 28, 2014, 09:30 »

Раньше всегда делал сначала оконное приложение, потом добавлял к нему функции консольного - всё получалось. Сейчас есть приложение, которое изначально было сделано, как консольное, но потребовалось добавить к нему окно. То есть, если указан ключ -windowed, оно должно открыть окошко и показывать на нем прогресс выполнения, с кнопками Пауза и Прекратить. Выполнение при этом идет в фоне, оно довольно долгое, от 10 до 20 минут (обмен данными по сети). Переделать приложение целиком на оконное не представляется возможным - консольное хорошо работает, и оно состоит из приложения на обычном С++ (причем на CMake), к которому подключена динамическая библиотека, в которой уже используется Qt для сетевого обмена. В библиотеке создается QApplication, в котором по сигналу таймера запускается основной процесс, управление уходит функциям основного приложения, они передают-принимают данные, вызывая через врапперы библиотеки сетевые функции Qt. Менять эту структуру уже нельзя - это значит всё порушить и делать фактически с 0, на это времени нет. Надо добавить окно в библиотеку, и туда набор функций, чтобы приложение могло передавать сигналы о процессе выполнения, и они отображались в окне.

Почему-то я посчитал (наверно просто что-то подзабыл), что если я просто создам диалог или основное окно приложения, то оно отрисуется и его цикл обработки сообщений будет работать независимо от основной нити. Нифига. Создаю в библиотеке диалог (с основным окном результат такой же) перед выполнением функций приложения в основной нити. Окно диалога начинает рисоваться, но не дорисовывается, управление уходит основному приложению. Окно имеет только рамку, его можно перемещать, но на события оно не откликается. То есть, его методы не работают в параллельном цикле обработки сообщений и процессорное время не получают.

Значит надо, вроде бы, запустить параллельную нить, в которой создать диалог? А ничего, что цикл обработки сообщений приложения будет в другой, основной нити? Или может надо как-то по-другому? Хочу вот посоветоваться...
« Последнее редактирование: Февраль 28, 2014, 13:20 от Гурман » Записан

2^7-1 == 127, задумайтесь...
OKTA
Гость
« Ответ #1 : Февраль 28, 2014, 09:47 »

ГУИ может работать только в главном потоке приложения, так что все, что работает сейчас лучше перетащить в отдельный поток, а главный оставить для ГУИ. Ну или наверно processEvents должен помочь отчасти, если не хочется мучиться с потоками.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Февраль 28, 2014, 09:57 »

Ну да, я забыл, что гуи только в главном потоке... Сделал диалог в QThread (с нитями я работал, опыт есть) - эффект тот же, окно появляется, но не дорисованное.

processEvents не очень подходит, он сильно посадит скорость обмена, тут критично, обмен идет не с компьютером, а с PIC-контроллером.

Пока похоже единственный вариант - перенести в нить вызов функции основного приложения, которая обмен производит, а диалог оставить в главной нити.

Буду думать...
« Последнее редактирование: Февраль 28, 2014, 09:59 от Гурман » Записан

2^7-1 == 127, задумайтесь...
OKTA
Гость
« Ответ #3 : Февраль 28, 2014, 10:34 »

А он бы и не дал перенести гуи в отдельный поток - выдал бы ошибку, на сколько я помню, поэтому раз поведение осталось таким же, то и попытки переноса не было)
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Февраль 28, 2014, 10:53 »

Код:
class DialogThread : public QThread
{
    friend class Laninout;

    DialogThread();
    ~DialogThread();

    Dialog progressDialog;

    void run();
};

void DialogThread::run()
{
    progressDialog.open();
    exec();
}

Код:
class Laninout : public QObject
{
...
private:
    DialogThread dialog;
...
}

extern int initConnection( int baseargc, char** baseargv )
{
    a = new QApplication( baseargc, baseargv );
    instance = new Laninout( baseargc, baseargv );
    QTimer::singleShot( 0, instance, SLOT( mainjob() ) );
    return a->exec();
}

void Laninout::mainjob()
{
    dialog.start();
...
}

так было или не было?

окно появляется, но потом всё...
Записан

2^7-1 == 127, задумайтесь...
OKTA
Гость
« Ответ #5 : Февраль 28, 2014, 11:02 »

progressDialog создается в контексте главного потока и в нем же остается, разве нет?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Февраль 28, 2014, 11:14 »

а, ну в общем то, да...

но если

Код:
void DialogThread::run()
{
    progressDialog = new Dialog();
    progressDialog->open();
    exec();
}

то всё равно сообщения об ошибке нет, поведение такое же - окно появляется, но процессор не получает
« Последнее редактирование: Февраль 28, 2014, 11:18 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Февраль 28, 2014, 13:19 »

Ради эксперимента сделал всё в одном потоке, но после каждой передачи буфера в контроллер, а также при таймаутах соединения вызвал processEvents(). И всё пучком, ни на скорости, ни на стабильности никак не сказывается. 15 минут, сколько шла передача, елозил мышью по кнопкам окна, время точно то же, что и у чисто консольного варианта. Единственное, если начать окно возить по экрану, передача приостанавливается, но это ерунда, ни на чем не сказывается. Так и оставлю...
Записан

2^7-1 == 127, задумайтесь...
Douglassef
Гость
« Ответ #8 : Март 08, 2014, 11:18 »

<a href=http://hostingkartinok.com><IMG>http://s6.hostingkartinok.com/uploads/images/2013/05/5b661711bc6b5b337a8516b3bdd49216.jpg</IMG></a>
Социальные сети набрали такое количество популярности, что без них теперь сложно представить современный интернет. Если раньше такое общение воспринималось как диковинка, то сейчас от социальных сайтов требуют все больше новых услуг. Одной из таких услуг стала возможность мобильного доступа, на что участники такой сети как Одноклассники отреагировали более чем положительно.
Оно понятно, ведь приложение Одноклассники для телефона содержит в себе такие же инструменты, как и обычный профиль. Основной плюс, это конечно же быстрый доступ из любой точки страны и планеты. Скрывать тот факт, что многие из нас любят пообщаться с друзьями, родными и коллегами во время учебы и работы, бессмысленно, а с мобильным приложением, это становится куда комфортнее и безопаснее.
Социальная сеть Одноклассники - один из популярнейших ресурсов русскоговорящего Интернета: более 130 млн пользователей, около 60 млн посетителей в сутки. Для более удобного посещения сети с мобильных устройств  создали специальную программу <a href=http://my.opera.com/odnoklassnikimobile/blog/show.dml/103144062>"Одноклассники Мобильная Версия 2014"</a>.
скачать программу одноклассники  <a href=http://odnoklassnikimobile2014.ru.tf>odnoklassniki.ru для телефона</a> - для Nokia, Samsung  <a href=http://clubgalaxycom.ru>Андроид игры скачать</a>
<a href=http://odnoklassnikimobile2014.ru.tf>Одноклассники для телефона скачать</a>  - Специальное приложение для одноименной популярной социальной сети в интернете.
Жизнь каждого из нас становится все более стремительной и насыщенной. Но всегда нужно находить время на родных, близких и друзей. Общение тесно вписалось в наши жизни. Но далеко не всегда есть доступ к компьютеру с интернетом. Отныне, где бы вы ни находились: в отпуске, на прогулке – вы имеете возможность не прерывать свое общение. Для этого потребуется только мобильный телефон с доступом в Интернет. Не терять связи с родными Вам поможет <a href=https://twitter.com/sanyasud76>одноклассники мобильная версия</a> . Новое усовершенствованное приложение <a href=http://my.opera.com/odnoklassnikimobile/blog/show.dml/103144062>Мобильные Одноклассники 2014 </a>  позволит вам в любой точке мира, на отдыхе, на работе, на учебе, в общественном транспорте или дома уделять свободное время общению с приятными людьми.
скачать программу одноклассники  <a href=http://odnoklassnikimob2014.ru.tf>одноклассники скачать на телефон</a>  для смартфонов и телефонов Android  <a href=http://clubgalaxycom.ru>Андроид игры скачать</a>
У вас есть аккаунт в самой популярной социальной сети Рунета Одноклассники.ру? Специально для вас существует замечательное приложение для мобильных устроЙств <a href=http://odnoklassniki07.ru.tf>Одноклассники на телефон</a>  для того, чтобы всегда находиться на связи с вашими друзьями, семьей и коллегами.
скачать одноклассники  <a href=http://odnoklassniki07.ru.tf>скачать одноклассники на андроид 4.0</a> для Android     <a href=http://clubgalaxycom.ru>Андроид игры скачать</a>
Вне зависимости от того, где вы находитесь – на прогулке, в отпуске – иными словами, вдали от компьютера, вы всегда сможете зайти в <a href=https://twitter.com/stasbor80>Одноклассники через телефон</a> и продолжать обмениваться со своими друзьями новостями, фотографиями и сообщениями.
скачать программу одноклассники  <a href=http://odnoklassnikimobile2014.ru.tf>одноклассники мобильная версия для андроид</a> для Android       <a href=http://clubgalaxycom.ru>Андроид игры скачать</a>
Вы можете скачать совершенно новое приложение Одноклассники для телефона прямо сейчас, очень быстро и легко. Вам нужно всего-лишь нажать на эту кнопку, дождаться окончания загрузки и получить удовольствие от общения в новом удобном приложении.
скачать приложение одноклассники : <a href=http://odnoklassnikiandroid2014.ru.tf>одноклассники мобильная версия скачать бесплатно</a>  для смартфонов и телефонов Android      <a href=http://clubgalaxycom.ru>Андроид игры скачать</a>
Программа <a href=http://odnoklassnikiandroid2014.ru.tf>Одноклассники в мобильном телефоне</a> поддерживает все основные возможности мобильной версии сайта, а также предлагает вам дополнительные возможности.
<a href=http://odnoklassnikimobile777.ru.tf>Скачать одноклассники на телефон</a>  приложение последняя версия 2014 года для смартфонов телефонов и планшетов. Что вы получите, после того, как версия Одноклассников для мобильного телефона будет установлена на ваш телефон?
скачать одноклассники  <a href=http://odnoklassnikiwap2014.ru.tf>одноклассники телефонная версия</a>  для смартфонов и телефонов Android      <a href=http://gamesmobile.igg.biz/>Андроид игры скачать</a>
1. Вы сможете более удобно и быстро переписываться с вашими друзьями, используя смайлики;
<a href=http://clubgalaxycom.ru>Андроид игры скачать</a>
2. Приложение Одноклассники в вашем мобильном телефоне поддерживает видеочат с удобным интерфейсом;
<a href=http://mobigame.igg.biz>Андроид игры скачать</a>
3. Очень удобный виджет позволяет быстро загружать фотографии с камеры вашего телефона;
скачать одноклассники на телефон   <a href=http://odnoklassnikimobile777.ru.tf>одноклассники мобильная версия скачать на телефон</a> для Android 
4. Отображения количества произошедших новых событий и установка статуса;
<a href=http://mobigame.igg.biz/>Андроид игры скачать</a>
5. Вы сможете войти в Одноклассники через телефон и прямо из приложения провести быструю загрузку фотографий из галереи вашего телефона. Где бы вы ни были, где бы ни путешествовали, ваши друзья всегда смогут увидеть и оценить все фотографии. При этом вам не придется искать компьютер, ведь программа Одноклассники для телефона не даст вам потерять связь с вашими друзьями.
<a href=http://mobilegames2014.ru.tf>Андроид игры скачать</a>
6. Кроме загрузки, вы сможете редактировать ваши фотографии и добавлять к ним описание. Здорово, когда практически мгновенно, сделав фото на телефон, вы можете зайти в Одноклассники с телефона и показать друзьям, как здорово вы проводите время.
скачать приложение одноклассники : <a href=http://mobileodnoklassniki1.ru.tf>одноклассники мобильная версия скачать</a> - для Nokia, Samsung  <a href=https://twitter.com/prihodniyyura>Андроид игры скачать</a>
7. Вы сможете настраивать сигналы уведомлений, оповещающих о важных событиях (так называемые push-уведомления). Не нужно будет каждую минуту обновлять страницу в вашем Интернет-браузере, чтобы узнавать о новостях. Совершив в Одноклассники вход с телефона вашей модели, вы будете оповещаться системой по мере появления событий и новостей.
скачать одноклассники  <a href=http://odnoklassnikimobile777.ru.tf>одноклассники мобильная версия для телефона </a> BlackBerry, HTC, Windows Phone     <a href=https://twitter.com/shturkovevgen>Андроид игры скачать</a>
8. Вам доступна возможность обмениваться ссылками с вашими друзьями прямо из браузера. Это очень удобно, когда вы владеете интересным материалом и спешите показать его вашим друзьям.
Скачав <a href=http://odnoklassnikimobile777.ru.tf>Одноклассники на телефон</a>  Нокиа или любой другой мобильный, вы всегда будете онлайн и в гуще событий. Ваш телефон – всегда с вами, а это значит, что не стоит отказывать себе от удовольствия всегда быть онлайн в Одноклассниках. Ответ на вопрос как настроить <a href=http://odnoklassnikimobile777.ru.tf>Одноклассники в телефоне</a>  очень прост - ничего настраивать не нужно! Вся программа сконструирована таким образом, чтобы обеспечить интуитивно-понятное правление для каждого пользователя. Таким образом <a href=http://odnoklassnikimobile777.ru.tf>Одноклассники для телефона</a> Самсунг и иных доступны для каждого человека. Этот софт максимально адаптирован под мобильные устройства, поэтому то как подключить <a href=http://odnoklassnikimobile777.ru.tf>Одноклассники на телефон</a> больше не остается загадкой – качайте, устанавливайте и наслаждайтесь!
Если ваш телефон поддерживает Java 2.0, то сайт <a href=http://odnoklassnikimobile777.ru.tf>Одноклассники через телефон</a> откроет перед вами все перечисленные преимущества. Владельцы ОС Symbian, Android, Windows Phone 7, Bada прочувствуют все преимущества сполна, а владельцы новых планшетов смогут общаться с помощью видеозвонков, которые можно делать с телефона на телефон либо же с сайта на телефон.<a href=http://odnoklassnikimobile777.ru.tf>Мобильные Одноклассники </a> поддерживает загрузку видео, аудио, фото, и других форматов. Благодаря этому приложению у вас есть возможность делиться новостями или любой другой информацией с друзьями, размещать ее на своей странице, а также искать новых знакомых, а осуществлять это можно через мобильный, который всегда под рукой! Для тех, кто постоянно нуждается в связи со своими друзьями и на минуту не может расстаться с ними, это приложение станет отличной возможностью постоянно быть в сети, где бы вы ни были, а также экономить деньги на трафике благодаря удобному и продуманному интерфейсу. К тому же, дизайн приложения разработан специально для того, чтобы вам было приятно пользоваться <a href=http://odnoklassnikimobile777.ru.tf>Одноклассники Мобильная Версия</a>. Расскажите своим друзьям, что с вами произошло за день, поинтересуйтесь их новостями, поделитесь свежими фотографиями из последнего путешествия, либо даже сделайте это прямо в номере отеля, находясь в другой стране! При этом вам не нужно искать компьютер или доступ в интернет. Все ваши друзья будут рядом с вами благодаря приложению <a href=http://odnoklassnikimobile777.ru.tf>Мобильные Одноклассники </a> . Новая версия <a href=http://odnoklassnikimobile777.ru.tf>Мобильные Одноклассники </a> – это возможность круглосуточного общения в сети интернет без персонального компьютера, без потерь времени и дополнительных манипуляций.Программа проста в использовании, не требует дополнительных настроек, устанавливается автоматически. С ней справится любой неподготовленный человек.
java игры : <a href=http://mobilewapbox.ru>игры на телефон nokia</a> - игры для телефона 
игры для самсунга  <a href=http://clubgalaxycom.ru>скачать игры на телефон  </a> - игры для телефона 
игры для нокиа   <a href=http://android2014.ru>скачать игры на телефон samsung  </a> игры для сенсорных телефонов 
лучше порно онлайн  <a href=http://mobivideo2014.igg.biz>смотреть порно</a> порно онлайн лучшее 
игры для кпк windows mobile  <a href=http://androidnew2014.ru>скачать игры на телефон nokia</a> мобильные игры 
игры для кпк windows mobile  <a href=http://android-mobwapinfo.ru>игры нa тeлeфон samsung</a> - игры для телефона 
игры для нокиа   <a href=http://android-vipfile.ru/>скачать игры на телефон nokia</a> игры для сенсорных телефонов 
приложение вконтакте для телефона бесплатно  <a href=http://vkontaktemobile2014.ru.tf>вконтакте мобильная версия для андроид</a> - для Nokia, Samsung 
скачать одноклассники  <a href=http://odnoklassnikimob2014.ru.tf>одноклассники мобильная версия</a>  для смартфонов и телефонов Android
скачать программу одноклассники  <a href=http://odnoklassnikiwap2014.ru.tf>одноклассники мобильная версия скачать</a>  для смартфонов и телефонов Android
скачать одноклассники на телефон   <a href=http://odnoklassnikiandroid2014.ru.tf>одноклассники для телефона</a> для Android 
скачать одноклассники  <a href=http://odnoklassniki07.ru.tf>скачать одноклассники на андроид 4.0</a> для Android 
скачать одноклассники на телефон   <a href=http://odnoklassnikimobile2014.ru.tf>odnoklassniki.ru для symbian</a> - для Nokia, Samsung 
скачать одноклассники  <a href=http://odnoklassnikimobile777.ru.tf>одноклассники через мобильный</a> - для Nokia, Samsung
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.176 секунд. Запросов: 23.