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 кривой (будь он не ладен))? Второй вопрос в адекватности решения. Я думаю есть более правильные и красивые решения?
Заранее спасибо.
|