Я в настоящее время пытаюсь создать хороший и рабочий дизайн Qt
для связи между несколькими потоками. У меня есть окно предпочтений, которое генерирует разные сигналы при нажатии на приложение. Например, для создания соединения SQL и изменения другого. Я хочу изменить настройки в фоновом потоке в разных классах, и после внесения изменений они должны испускать результирующий сигнал. В окне настроек я теперь хочу подождать, пока все сигналы не получат (либо с истинным, либо ложным результатом), прежде чем я либо закрою окно, либо распечатаю сообщение об ошибке.Является ли myDesign для связи потоков приемлемой?
Я попытался нарисовать свой рисунок на прилагаемой картинке. Это правильный путь для моей цели? В настоящее время я изо всех сил стараюсь ждать всех результатов. Я думал о создании какого-то массива для сохранения каждого результата и проверки массива, независимо от того, получены ли все сигналы. Но это звучит довольно уродливо ... Есть ли лучший способ подождать, пока не будут получены все сигналы?
Также неплохо сделать классы в фоновом потоке как singelton
? Мне нужен только один экземпляр классов, и это облегчит доступ к классам, так как мне не нужно перетаскивать указатели на каждый объект, который должен знать классы.
Также я хотел бы знать, является ли хорошей идеей для хранения публичного члена в классе MySQL, который говорит мне, связана ли база данных и доступ к ней непосредственно из других потоков?
Спасибо!
Спасибо за ваш ответ! На данный момент я не знаю, подходит ли мне QtConcurrent :: run', я пока не могу сказать, но я думаю, что понимаю концепцию. В чем проблема с одиночками в этом случае? В противном случае мне понадобится каждый класс, который должен связываться с этим потоком, чтобы знать указатель на этот объект, который звучит довольно сложно ... – honiahaka10
Что касается 'QStateMachine', я не совсем понял эту концепцию, может быть, у вас есть небольшой пример ? Насколько я понимаю, мне нужно создать состояние для каждого возможного сигнала и код результата для каждого из моих классов. Я бы инициализировал их государством, говорящим мне, что они еще не обработаны. В моей процедуре ожидания я буду проверять каждое состояние непрерывно, пока каждое состояние не будет иметь правильное состояние. Правильно ли я это понял? – honiahaka10
Прежде всего, вы предполагаете, что есть * поток. Вам, вероятно, не нужно беспокоиться об этом. Пусть 'QThreadPool' управляет потоками наиболее эффективным образом и представляет работу с ними, используя' QtConcurrent :: run'. Контроллер - бизнес-логика - может быть единственным «QObject», который представляет работу, которая должна выполняться одновременно, и действует на результаты, см. Редактирование. –