Russian Qt Forum
Май 06, 2024, 17:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 3 [4] 5 6 ... 58
46  Qt / Многопоточное программирование, процессы / Re: Глобальная переменная в потоках : Декабрь 22, 2022, 12:06
Да, я об этом думал. Но мне не критична целостность этой переменной, поэтому не стал усложнять. Спасибо.
47  Qt / Многопоточное программирование, процессы / Re: Глобальная переменная в потоках : Декабрь 22, 2022, 10:26
Добавлю еще вопрос: как оценить ресурсоемкость мьютекса на чтение? В первую очередь, его быстродействие.
48  Qt / Многопоточное программирование, процессы / [Решено] Глобальная переменная в потоках : Декабрь 22, 2022, 10:01
Коллеги,
вопрос про азы многопотокового программирования. Думаю, что ответ простой и очевидный ))
Есть глобальная булевая переменная COptions::profilerIsActive.
Переменная может изменяться из разных потоков с использованием мьютекса, например:
Код
C++ (Qt)
{
   QMutexLocker locker(&mutex);
   COptions::profilerIsActive = true;
...
}
 
Она используется в качестве флага для эмитирования сигнала вот так, без блокировки:
Код
C++ (Qt)
   if(COptions::profilerIsActive) {
       emit profilerSig(1, vars.unitId, requestId, QDateTime::currentMSecsSinceEpoch(), vars.hasError(), queueLength());
   }
 
Вопрос: если в момент чтения переменной выполняется ее изменение, может ли это привести к краху программы? То, что я могу прочитать недостоверное значение, меня не волнует - на следующем цикле прочту истинное значение и запущу или остановлю испускание сигнала.

49  Qt / Многопоточное программирование, процессы / Re: Класс для запуска и управления несколькими потоками : Декабрь 08, 2022, 14:07
Код:
Единственное у меня вопрос, у меня клиент запускается в потоке, клиент создает сокет и кидает потоку который уже организовывает конект.
Не понял про "кидает" и про "коннект". Попробуйте это сформулировать другим языком, используя терминологию Qt.
Если же вы имеете в виду соединение сигнал-слот, то его правильнее осуществлять в клиенте.

Код:
И как понимаю методы read и write должны быть реализованы в классе самого потоке не в классе клиента?
Но вот когда поток я создаю для него то метод run overload запускается автоматом а мне надо так чтобы после какого то действия в приложении.
Что за read, write? Это обработчики сокета?
Судя по всему, вы наследуете QThread. Это не очень хороший способ использования потока. Я вам дал пример, в котором нужный объект передается объекту потока, а запуск выполнения потока вы можете осуществлять, когда вам нужно.
50  Qt / Многопоточное программирование, процессы / Re: Класс для запуска и управления несколькими потоками : Декабрь 04, 2022, 13:17
Эти сигналы (servicePollingSig, serviceArchiveSig и т.д.) я оставил для примера, чтобы вы помнили, что межпотоковое взаимодействие осуществляется, как правило, с помощью этого механизма.
В моем случае объекты polling, archiving и т.д. выполняют каждый свою задачу (опрос устройств, создание долговременного архива данных и т.д.), работают каждый со своей периодичностью по таймеру. Поскольку таймер должен создаваться в том потоке, в котором он работает, то для запуска используются упомянутые выше сигналы. Вызываются они тогда, когда это нужно по ходу выполнения программы. Например, у меня - при запуске сервера, после того, как все объекты созданы, распиханы по потокам, прочтена конфигурация:
Код
C++ (Qt)
void CCoreServer::startServices() {
...
   if(COptions::autoPolling)
       emit servicePollingSig(true);
   else
       qInfo("CoreServer: service of polling disabled.");
 
   if(COptions::autoArchiving)
       emit serviceArchiveSig(true);
...
 
Если ваши классы что-то там делают, а результат их деятельности (например, какие-нибудь данные) потребляются в каком-нибудь другом потоке, то придется создать еще одно соединение сигнал-слот, через которое будете отдавать эти данные.

Если эти данные будут представлять собой объекты каких-нибудь ваших классов, то эти классы нужно будет зарегистрировать в метаобъектной системе Qt, например, так:
Код
C++ (Qt)
Q_DECLARE_METATYPE(CRequestArgs)
...
{
   if(!QMetaType::isRegistered(QMetaType::type("CRequestArgs")))
       qRegisterMetaType <CRequestArgs>    ("CRequestArgs");
...
 

В общем, там еще очень много интересного Подмигивающий Поэтому присматривайтесь к сообщениям компилятора.

ЗЫ Не стоит злоупотреблять цитированием сообщений, тем более, когда это и не требуется, - это плохой тон))
51  Qt / Многопоточное программирование, процессы / Re: Класс для запуска и управления несколькими потоками : Декабрь 03, 2022, 21:52
Например, так:
Код
C++ (Qt)
class CCoreServer : public QObject
{
   Q_OBJECT
private:private:
   CServicePolling  polling;
   CServiceArchives archiving;
   CServiceRules    rules;    
   CServiceTransmit transmission;
 
   QThread pollingThread;    
   QThread archivingThread;  
   QThread ruleThread;        
   QThread transmissionThread;
 
...
 
CCoreServer::CCoreServer(QObject *parent) : QObject(parent),
   polling(this),
   archiving(this),
   rules(this),
   transmission(this)
{
...
 
   polling.moveToThread(&pollingThread);
   QObject::connect(this, &CCoreServer::servicePollingSig, &polling, &CServicePolling::serviceRunSlot, Qt::BlockingQueuedConnection);
   pollingThread.setObjectName("polling");
   pollingThread.start(QThread::HighPriority);
   qInfo ("Polling thread started.");
 
   archiving.moveToThread(&archivingThread);
   QObject::connect(this, &CCoreServer::serviceArchiveSig, &archiving, &CServiceArchives::serviceRunSlot, Qt::BlockingQueuedConnection);
   archivingThread.setObjectName("archiving");
   archivingThread.start();
   qInfo ("Archiving thread started.");
 
   rules.moveToThread(&ruleThread);
   QObject::connect(this, &CCoreServer::serviceRuleSig, &rules, &CServiceRules::serviceRunSlot, Qt::BlockingQueuedConnection);
   QObject::connect(this, &CCoreServer::loadRuleSig,    &rules, &CServiceRules::loadRulesSlot);
   ruleThread.setObjectName("rules");
   ruleThread.start();
   qInfo ("Rules thread started.");
 
   transmission.moveToThread(&transmissionThread);
   QObject::connect(this, &CCoreServer::serviceTransmissionSig, &transmission, &CServiceTransmit::serviceRunSlot, Qt::BlockingQueuedConnection);
   transmissionThread.setObjectName("transmission");
   transmissionThread.start(QThread::LowPriority);
   qInfo ("Transmission thread started.");
 
52  Qt / Многопоточное программирование, процессы / Re: Запуск каждого сокета сервера в отдельнмо потоке QThread : Ноябрь 30, 2022, 18:22
Сокеты должны создаваться в том потоке, где используются. Соответственно, ключи загружаете там же.
Передача данных - через сигнал/слот.
53  Qt / Пользовательский интерфейс (GUI) / Re: Кастомизация встроенного HTML : Ноябрь 30, 2022, 17:28
Нет. Все стили привязаны к виджетам или их свойствам: https://doc.qt.io/qt-5/stylesheet-reference.html
54  Qt / Вопросы новичков / Re: QT + libusb : Ноябрь 22, 2022, 12:44
Я имел в виду rules
55  Qt / Вопросы новичков / Re: QT + libusb : Ноябрь 22, 2022, 12:37
Можно еще попробовать установить права доступа с использованием RUN и chmod, например:
https://stackoverflow.com/questions/52318133/how-to-change-specific-file-permissions-using-udev-rule
56  Qt / Вопросы новичков / Re: QT + libusb : Ноябрь 22, 2022, 11:40
Может, KERNEL не хватает?
57  Qt / Общие вопросы / Re: Размер программы в Qt : Ноябрь 09, 2022, 12:47
Спасибо!
58  Qt / Общие вопросы / Re: Размер программы в Qt : Ноябрь 08, 2022, 22:52
Честно, не понял, чем мне это может помочь В замешательстве Вот если бы вы написали, что 3 Мб - это так, ерунда, а 5 - уже много, то я бы знал, к чему стремиться Подмигивающий
59  Qt / Общие вопросы / Re: Размер программы в Qt : Ноябрь 08, 2022, 14:29
3 МБ нынче много? Улыбающийся или это встраиваемые системы, где каждый КБ на счету?
Если б это была встраиваемая система, вопроса бы не возникло. Видимо, у меня рефлекс с времен dos 3.0 Подмигивающий
Но, в общем, посыл я понял.
60  Qt / Общие вопросы / Размер программы в Qt : Ноябрь 08, 2022, 12:03
Коллеги,
размер исполняемого файла 2-3 Мб в Linux при динамической компоновке - это нормально? При каком размере стоит задуматься об оптимизации архитектуры?
А то начинал с полутора Мб, а функционал все растет...
Страниц: 1 2 3 [4] 5 6 ... 58

Страница сгенерирована за 0.171 секунд. Запросов: 23.