Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: izoomer от Май 11, 2007, 20:01 В конструкторе главного окна есть код
Код:
так вот ... в deviceDispatcher идет формирование данных, без которых не должны создаваться следующие объекты ... то есть для объекта player нужен сформировавшийся deviceDispatcher , а получается так, что код выполняется дальше , а данные в deviceDispatcher не получены есче все ,... как сделать так , что бы в конструкторе главного окна дождаться выполнения всех операций в deviceDispatcher , а потом продолжать код ? Может показывать окно какое то с сообщением что "данные формируются, ждите " .... как так сделать ? Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: AlexVR от Май 11, 2007, 20:59 Цитата: "izoomer" В конструкторе главного окна есть код Это, что у тебя конструктор JDeviceDispatcher создает отдельный поток для свой инициализации? Или как это он еще не сформировал все данные?Код:
так вот ... в deviceDispatcher идет формирование данных, без которых не должны создаваться следующие объекты ... то есть для объекта player нужен сформировавшийся deviceDispatcher , а получается так, что код выполняется дальше , а данные в deviceDispatcher не получены есче все ,... как сделать так , что бы в конструкторе главного окна дождаться выполнения всех операций в deviceDispatcher , а потом продолжать код ? Может показывать окно какое то с сообщением что "данные формируются, ждите " .... как так сделать ? Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: izoomer от Май 11, 2007, 21:06 Цитата: "AlexVR" Цитата: "izoomer" В конструкторе главного окна есть код Это, что у тебя конструктор JDeviceDispatcher создает отдельный поток для свой инициализации? Или как это он еще не сформировал все данные?Код:
так вот ... в deviceDispatcher идет формирование данных, без которых не должны создаваться следующие объекты ... то есть для объекта player нужен сформировавшийся deviceDispatcher , а получается так, что код выполняется дальше , а данные в deviceDispatcher не получены есче все ,... как сделать так , что бы в конструкторе главного окна дождаться выполнения всех операций в deviceDispatcher , а потом продолжать код ? Может показывать окно какое то с сообщением что "данные формируются, ждите " .... как так сделать ? в нем есть есче один класс, который читает данные из последовательного порта. Этот класс создается и читает данные в слоте своем , по сигнгалу от QSocketNotifer. Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: AlexVR от Май 11, 2007, 21:58 Заводи public флаг в классе JDeviceDispatcher. И жди его установки. Только тогда код:
deviceDispatcher = new JDeviceDispatcher(this); // ... // Ожидание флага // ... player = new JPlayer(this, deviceDispatcher); cashRegister = new JCashRegister (this,deviceDispatcher); configModel = new JConfigModel(deviceDispatcher); заноси в отдельный поток, чтобы не подвисало. ---- Можно, конечно попробывать создать сигнал в JDeviceDispatcher и связать его со слотом главной формы, в котором и провести оставшиеся инициализации. Но тут нет уверености, что за время после создания класса и коннекта сигнала и слота, уже не будет вызван этот сигнал. Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: izoomer от Май 11, 2007, 23:23 в моем случае можно подвисать .... тогда в блоке ожидания флага делаем цикл while(1){} ... а вот как прально сделать класс deviceDispatcher .... сделать его QThread ?
добавлено спустя 13 минут: сделал Код:
run пустое у меня. сделал переменную flagReady .... в конструкторе делаю её false .... затем когда все готово делаю её true .... так вот ... в основном конструторе главного окна ... Код:
и висит на wile ... класс deviceDispatcher не хочет выполняться ... вообще стоит ... я же делаю ему start() , я так понимаю что он должен на фоне запустится и работать пока тут while гоняется .... что не так делаю ? Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: AlexVR от Май 12, 2007, 00:13 Как говорилось, при таком методе нужен втрой поток.
А можно обойтись и только слотами и сигналами. В JDeviceDispatcher 1. Создаем public slot для запуска инициализации (например, StartInit()) 2. Создаём сигнал о завершении инициализации, через который сообщаям об её успешности (например, StopedInit(bool b)) 3. По окончании инициализации вызываем StopedInit. В Главном окне 1. Создаем слот для продолжения инициализации окна (например, ContinueInit(bool b)). Если все хорошо, то в нем вызываем Код:
2. В конструкторе: Код:
Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: izoomer от Май 12, 2007, 09:38 Цитата: "AlexVR" Как говорилось, при таком методе нужен втрой поток. А можно обойтись и только слотами и сигналами. В JDeviceDispatcher 1. Создаем public slot для запуска инициализации (например, StartInit()) 2. Создаём сигнал о завершении инициализации, через который сообщаям об её успешности (например, StopedInit(bool b)) 3. По окончании инициализации вызываем StopedInit. В Главном окне 1. Создаем слот для продолжения инициализации окна (например, ContinueInit(bool b)). Если все хорошо, то в нем вызываем Код:
2. В конструкторе: Код:
та хотел именно с потоками сделатиь .... конструктор большой, и много всяких инициализаций придется выносить ... много переделывать ... да есче и хотел окно ожидания каконить показывать .... вот и хотел на потоках сделать ... может подскажет кто, как прально сделать мою задачу на потоках ? Название: [qt-4.2.0] Приостановить конструктор до прихода сигнала Отправлено: goer от Май 12, 2007, 12:18 Я вобщем особо предыдущие посты не читал, но сразу пришла мысль сделать паузу через QEventLoop: и проц грузить не будет как while(1) и юзать удобно так как средство кутевое.
Вместо сигнала тогда можно послать событие, суть та же. |