Russian Qt Forum

Qt => ActiveX => Тема начата: makes от Декабрь 22, 2010, 14:01



Название: QLocalServer не реагирует на входящее соединение
Отправлено: makes от Декабрь 22, 2010, 14:01
Добрый день!

Проблема (как я понял) с "засыпанием" потока сообщений. Хотя проблему я решил, хотелось бы узнать есть ли другое решение и получить комментарии.

Подробности.
Пишу активикс (ActiveQt, dll). Тестирую его в FoxPro9 (запускаю из-под отладчика MSVC9).
Мой активикс в определенный момент инициализирует сервер QLocalServer (создает объект,
коннектит SIGNAL(newConnection()) к SLOT(onNewConnection()) и вызывает listen()).
После этого другой процесс УСПЕШНО подключается к этому серверу QLocalSocket'ом.
Однако, QLocalServer никак не реагирует на входящее соединение (слот onNewConnection() не вызывается и nextPendingConnection() возвращает ноль) до тех пор пока в одном из методов объекта не вызвана QMessageBox::warning().
Из этого я сделал вывод, что цикл сообщений спит мертвым сном, так что QLocalServer не может обработать входящее соединение, и просыпается с вызовом MessageBox'a.
Решение придумал такое:
запускаю таймер (100 ms), и в его обработчике пишу только

QCoreApplication::processEvents();

то есть раз в 100 ms запускаю локальный цикл обработки сообщений (насколько я понимаю диалоговые окна, в том числе Qt-шные действуют таким же образом).

Вопрос, с чем это может быть связано (особенности реализации COM в Qt или клиент FoxPro9 кривой (будь он не ладен))?
Второй вопрос в адекватности решения. Я думаю есть более правильные и красивые решения?

Заранее спасибо.


Название: Re: QLocalServer не реагирует на входящее соединение
Отправлено: twp от Декабрь 23, 2010, 12:02
сложно что-либо сказать не видя кода сервера