![]() |
|
![]() ![]() ![]() |
|
kinetik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.6.2011 Репутация: нет Всего: нет |
Приветствую всех!
Есть оконное приложение на Qt (пользуюсь Qt Creator), прям в main вызывается функция из сторонней библиотеки и приложение как бы виснет на этой строке. к примеру: printf("before"); apiCalls(); // если точку останова поставить сдесь и посмотреть что будет то отладчик как-будто висит на месте и ничего не делает... и такое ощущение что происходит какая-то тупая блокировка потоков printf("after"); // и вот after не печатается Весь смысл в том что все делается в одном потоке, я никакие потоки не пораждаю. Но дальше интереснее если я делаю новый проект чисто консольный то все работает, все сторонние библиотеки одинаковые.. |
|||
|
||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
kinetik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.6.2011 Репутация: нет Всего: нет |
Уверен т.к. точно также подключаю в консольный проект все работает. Тут мне интересует вопрос потоков, может там гуй мешает выполнится действию? Просто как-то странно, когда консольный проект работает, а оконное приложение нет. А исходники я привел почти что, т.к. реально сейчас все упростил, но все равно фейл. Исходники библиотеки нет, есть дллка и файлик который цепляется к дллке и через него все функции вызываются. Это сообщение отредактировал(а) kinetik - 27.6.2011, 22:19 |
|||
|
||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
не ну как бы если я не ошибаюсь то функции printf() это только для QCoreApplication и они естествнно не будут работать в GUI приложении .. если только это не "QtCoreApplication\QtGui" приложение , т.е. и консоль и GUI интерфейс .... я просто не пойму что не так и что по чем .. покажи код ..
положи архив с проектом попробую помочь пока не заснул ... ![]() Это сообщение отредактировал(а) 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 |
|||
|
||||
kinetik |
|
||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.6.2011 Репутация: нет Всего: нет |
да дело не в этом ![]()
И вот на apiCalls() все виснет, точнее дальше не идет, но гуй отзывчивый, я так понимаю что если я работаю в контексте одного потока, то гуй должен висеть при исполнении apiCalls(), а он почти сразу оживает. |
||||
|
|||||
loneybibi |
|
|||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
если GUI отзывчивый то значит функция либо уже закончила свою работу и больше ничего не делает (или не может выполнить себя в крайнем случае ), или функция (как ты ее там делаешь я не знаю) выполняется в другом потоке параллельном и в таком случае естественно GUI будет полностью (отзывчив) функционировать как отдельный поток! что вызывает функция apiCalls !? , если не секрет что она вообще делает и ее код ? просто так очень трудно будет тебе помочь .. вообщем извини если что но я не телепат ...
это равно-сильно тому что я тебе напишу:
и пойми почему моя программа не выполняет функцию 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 |
|||
|
||||
kinetik |
|
||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.6.2011 Репутация: нет Всего: нет |
Я не прошу разобраться в моем коде, я обозначил проблему и только хочу услышать мнения в какую сторону копать. Все объяснено в первом посте и достаточно полно. То что ты написал смешно и ты не понял даже сути проблемы ![]() |
||||
|
|||||
loneybibi |
|
||||||||
![]() Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Да все я понял. Просто ты так описываешь проблему что грубо говоря тут может быть что угодно! Попробуй при использовании GUI приложения Debug функции Qt:
Скорее всего что apiCalls работает в другом потоке если GUI остается отзывчив. Но при этом не переходит к выполнению следующей инструкции. Т.е. если к примеру QLoopEvent (цикл) запустить вместо apiCalls(), и поставить к примеру псевдо много-поточность qApp->processEvents() то до завершения цикла (QLoopEvent::quit()) программа к метке Debug 2 не дойдет но GUI будет доступен. Это я к тому что если даже взять пример с отображением процесса загрузки файла к примеру, если по правильному, то GUI работает в одном потоке а файл грузится в другом, вот так же и тут. Просто не понятно как ты вызываешь стороннюю функцию и как она работает, может она сама по себе обрабатывается отдельным потоком, при этом GUI остается доступным но до завершения выполнения функции дальше перейти к инструкции не может. Надеюсь смысл того что я хотел сказать понятен. Я конечно извиняюсь мне иногда трудно выразить мысль, потому как я любитель а не профессионал. ![]() Это сообщение отредактировал(а) 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 |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |