Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Qt: передача сообщения в поток GUI  [new]
Barlone
Member

Откуда:
Сообщений: 1452
Dimitry Sibiryakov

Barlone
У того же QThread есть например метод setPriority, который работает под windows, а под
линуксом ничего не делает

А теперь самое главное по ссылке: "This function was introduced in Qt 4.1.", что чертовски
далеко от "писалось".
Так и "когда-то давно у Qt были проблемы с windows" чертовски далеко от "Qt несовместимо с WinAPI по определению"

Сообщение было отредактировано: 25 дек 20, 07:09
25 дек 20, 07:14    [22253729]     Ответить | Цитировать Сообщить модератору
 Re: Qt: передача сообщения в поток GUI  [new]
Barlone
Member

Откуда:
Сообщений: 1452
petrav

Но вот если вспомнить функцию _beginthread(). Дело в том, что ::CreateThread() ничего не знает про CRT и потоки созданные с помощью ::CreateThread() не совсем корректно потом работают с Си-рантаймом. Но тут я что-то подзабыл.
Не то чтобы "не совсем корректно потом работают", просто при завершении такого потока, если из него были вызовы некоторых функций crt, утечет маленький кусочек памяти, который должен освобождаться в _endthreadex(). Он же утечет, если завершить поток вызовом ExitThread(), даже созданный _beginthreadex(). Это на самом деле может быть проблемой, если постоянно работающий сервис в большом количестве плодит потоки.
25 дек 20, 07:25    [22253730]     Ответить | Цитировать Сообщить модератору
 Re: Qt: передача сообщения в поток GUI  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
petrav
Barlone
пропущено...
Да ну. Что конкретно в Qt несовместимо с std? Вот например https://doc.qt.io/qt-5/containers.html#stl-style-iterators
qHash() для std::pair есть. В QVector есть методы fromStdVector, toStdVector. В QMap - toStdMap. Для QString тоже есть toStdString.

Они имеют ввиду "я конечно не экономист, но точно чувствую гнилое здесь дело, лажа какая то зарыта" — как в экранизации Пелевина. В том плане, что в сложных вопросах межпоточного взаимодействия там действительно могут быть проблемы.

Сами прогеры часто усложняют там где не надо.
А в топиках Qt сложности оффтоп.
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
25 дек 20, 07:57    [22253736]     Ответить | Цитировать Сообщить модератору
 Re: Qt: передача сообщения в поток GUI  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Barlone

Это на самом деле может быть проблемой, если постоянно работающий сервис в большом количестве плодит потоки.

Обычно счас пул потоков используют. Проблема нивелируется.

Сообщение было отредактировано: 25 дек 20, 07:58
25 дек 20, 08:03    [22253738]     Ответить | Цитировать Сообщить модератору
 Re: Qt: передача сообщения в поток GUI  [new]
petrav
Member

Откуда:
Сообщений: 2861
Dimitry Sibiryakov

petrav
Поток timeSetEvent() обслуживает работу с оборудованием, неограниченное время работы. И
желательно в мягком реалтайме.

И зачем тогда в нём таймер? Там должен быть QNanoSleep, QWaitFor или что-то в этом роде.

Таймер там что бы жить во все глаза.

Таких штук как QWaitFor там просто нет — для интерфейсов к оборудованию. Их придётся реализовывать самому. И внутри этих реализаций в большинстве случаев тоже будет таймер. QNanoSleep сложно применим, поскольку время ожидания часто неизвестно. Да и вообще подвисание в ожидании чего-то недопустимо, потому что пока ждёшь чего-то одного нужно реагировать на что-то другое. Или эмулировать работу другого оборудования. Там целая поэма.

На каждую нитку логики выделить отдельный поток и в них делать wait() — кардинально усложнится архитектура обеспечивающая потокобезопасность. А точный миллисекундный таймер — решение простое и красивое.
25 дек 20, 20:26    [22254303]     Ответить | Цитировать Сообщить модератору
 Re: Qt: передача сообщения в поток GUI  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
petrav
А точный миллисекундный таймер — решение простое и красивое.
Это смотря что вы пишите - прикладной код или драйвер с точки зрения архитектуры.
На уровне драйвера пишите что хотите.
На прикладном уровне есть класс таймера от Qt.
И не усложняйте. Вся сложность внутри драйвера.
26 дек 20, 11:30    [22254557]     Ответить | Цитировать Сообщить модератору
 Re: Qt: передача сообщения в поток GUI  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
petrav,
Можно счас протокол к оборудованию притащить. Потом асинхронность\синхронность. И ещё много чего.
26 дек 20, 11:31    [22254558]     Ответить | Цитировать Сообщить модератору
 Re: Qt: передача сообщения в поток GUI  [new]
mayton
Member

Откуда: loopback
Сообщений: 51018
Модератор: Шериф - в городе. В городе - порядок.
26 дек 20, 14:47    [22254648]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / C++ Ответить