Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виснет приложение при вызове сторонней функции. 
:(
    Опции темы
kinetik
Дата 27.6.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.6.2011

Репутация: нет
Всего: нет



Приветствую всех!

Есть оконное приложение на Qt (пользуюсь Qt Creator), прям в main вызывается функция из сторонней библиотеки и приложение как бы виснет на этой строке.
к примеру:
printf("before");
apiCalls(); // если точку останова поставить сдесь и посмотреть что будет то отладчик как-будто висит на месте и ничего не делает... и такое ощущение что происходит какая-то тупая блокировка потоков
printf("after"); // и вот after не печатается
Весь смысл в том что все делается в одном потоке, я никакие потоки не пораждаю.

Но дальше интереснее если я делаю новый проект чисто консольный то все работает, все сторонние библиотеки одинаковые.. 

PM MAIL   Вверх
loneybibi
Дата 27.6.2011, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



а ты уверен что приложение находит библиотеку ? лучше код покажи .. или готовый проект ? 


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
kinetik
Дата 27.6.2011, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.6.2011

Репутация: нет
Всего: нет



Цитата(loneybibi @ 27.6.2011,  21:54)
а ты уверен что приложение находит библиотеку ? лучше код покажи .. или готовый проект ?

Уверен т.к. точно также подключаю в консольный проект все работает.
Тут мне интересует вопрос потоков, может там гуй мешает выполнится действию? Просто как-то странно, когда консольный проект работает, а оконное приложение нет.
А исходники я привел почти что, т.к. реально сейчас все упростил, но все равно фейл. Исходники библиотеки нет, есть дллка и файлик который цепляется к дллке и через него все функции вызываются.

Это сообщение отредактировал(а) kinetik - 27.6.2011, 22:19
PM MAIL   Вверх
loneybibi
Дата 27.6.2011, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



не ну как бы если я не ошибаюсь то функции printf() это только для QCoreApplication и они естествнно не будут работать в GUI приложении .. если только это не "QtCoreApplication\QtGui" приложение , т.е. и консоль и GUI интерфейс .... я просто не пойму что не так и что по чем .. покажи код .. 

положи архив с проектом попробую помочь пока не заснул ... smile

Это сообщение отредактировал(а) loneybibi - 27.6.2011, 22:21


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
kinetik
Дата 27.6.2011, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.6.2011

Репутация: нет
Всего: нет



Цитата(loneybibi @ 27.6.2011,  22:20)
не ну как бы если я не ошибаюсь то функции printf() это только для QCoreApplication и они естествнно не будут работать в GUI приложении .. если только это не "QtCoreApplication\QtGui" приложение , т.е. и консоль и GUI интерфейс .... я просто не пойму что не так и что по чем .. покажи код .. 

положи архив с проектом попробую помочь пока не заснул ... smile

да дело не в этом smile принт я привел для примера просто чтобы ты видел что-что-то происходит...

Код

void MainWindow::get_data_clicked()
{
    ui->textEdit->setPlainText("Start");
    apiCalls();
    ui->textEdit->setPlainText("End");
}


И вот на apiCalls() все виснет, точнее дальше не идет, но гуй отзывчивый, я так понимаю что если я работаю в контексте одного потока, то гуй должен висеть при исполнении apiCalls(), а он почти сразу оживает. 
PM MAIL   Вверх
loneybibi
Дата 27.6.2011, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



если GUI отзывчивый то значит функция либо уже закончила свою работу и больше ничего не делает (или не может выполнить себя в крайнем случае ), или функция (как  ты ее там делаешь я не знаю) выполняется в другом потоке параллельном и в таком случае естественно GUI будет полностью (отзывчив) функционировать как отдельный поток! что вызывает функция apiCalls !? , если не секрет что она вообще делает и ее код ? просто так  очень трудно будет тебе помочь .. вообщем извини если что но я не телепат ... 

это равно-сильно тому что я тебе напишу:
Код

void MainWindow::getInfo(){
qDebug()<<"Start";
myFunction();
qDebug()<<"Stop";
}


и пойми почему моя программа не выполняет функцию myFunction() ? 

Это сообщение отредактировал(а) loneybibi - 27.6.2011, 23:05


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
kinetik
Дата 30.6.2011, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.6.2011

Репутация: нет
Всего: нет



Цитата(loneybibi @ 27.6.2011,  23:00)
если GUI отзывчивый то значит функция либо уже закончила свою работу и больше ничего не делает (или не может выполнить себя в крайнем случае ), или функция (как  ты ее там делаешь я не знаю) выполняется в другом потоке параллельном и в таком случае естественно GUI будет полностью (отзывчив) функционировать как отдельный поток! что вызывает функция apiCalls !? , если не секрет что она вообще делает и ее код ? просто так  очень трудно будет тебе помочь .. вообщем извини если что но я не телепат ... 

это равно-сильно тому что я тебе напишу:
Код

void MainWindow::getInfo(){
qDebug()<<"Start";
myFunction();
qDebug()<<"Stop";
}


и пойми почему моя программа не выполняет функцию myFunction() ?

Я не прошу разобраться в моем коде, я обозначил проблему и только хочу услышать мнения в какую сторону копать. Все объяснено в первом посте и достаточно полно. То что ты написал смешно и ты не понял даже сути проблемы smile
PM MAIL   Вверх
loneybibi
Дата 30.6.2011, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Цитата(kinetik @ 29.6.2011,  23:29)
Цитата(loneybibi @ 27.6.2011,  23:00)
если GUI отзывчивый то значит функция либо уже закончила свою работу и больше ничего не делает (или не может выполнить себя в крайнем случае ), или функция (как  ты ее там делаешь я не знаю) выполняется в другом потоке параллельном и в таком случае естественно GUI будет полностью (отзывчив) функционировать как отдельный поток! что вызывает функция apiCalls !? , если не секрет что она вообще делает и ее код ? просто так  очень трудно будет тебе помочь .. вообщем извини если что но я не телепат ... 

это равно-сильно тому что я тебе напишу:
Код

void MainWindow::getInfo(){
qDebug()<<"Start";
myFunction();
qDebug()<<"Stop";
}


и пойми почему моя программа не выполняет функцию myFunction() ?

Я не прошу разобраться в моем коде, я обозначил проблему и только хочу услышать мнения в какую сторону копать. Все объяснено в первом посте и достаточно полно. То что ты написал смешно и ты не понял даже сути проблемы smile

Да все я понял. Просто ты так описываешь проблему что грубо говоря тут может быть что угодно!
Попробуй при использовании GUI приложения Debug функции Qt:
Код

qDebug()<<"Debug 1";
apiCalls();
qDebug()<<"Debug 2";

Скорее всего что apiCalls работает в другом потоке если GUI остается отзывчив. Но при этом не переходит к выполнению следующей инструкции. Т.е. если к примеру QLoopEvent (цикл) запустить вместо apiCalls(), и поставить к примеру псевдо много-поточность qApp->processEvents() то до завершения цикла (QLoopEvent::quit()) программа к метке Debug 2 не дойдет но GUI будет доступен. Это я к тому что  если даже взять пример с отображением процесса загрузки файла к примеру, если по правильному, то GUI работает в одном потоке а файл грузится в другом, вот так же и тут. Просто не понятно как ты вызываешь стороннюю функцию и как она работает, может она сама по себе обрабатывается отдельным потоком, при этом GUI остается доступным но до завершения выполнения функции дальше перейти к инструкции не может.
Надеюсь смысл того что я хотел сказать понятен.
Я конечно извиняюсь мне иногда трудно выразить мысль, потому как я любитель а не профессионал. smile

Это сообщение отредактировал(а) loneybibi - 30.6.2011, 01:26


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1043 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.