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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 6 7 [8] 9 10 ... 17   Вниз
  Печать  
Автор Тема: Igors, это ты? :)  (Прочитано 132102 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #105 : Сентябрь 03, 2018, 18:43 »

А что, Вы умеете обновлять UI из любой нитки (а не только главной)? Расскажите как, я так не умею  Улыбающийся

Ну это просто Qt говно - вон, винапи же умеет.
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #106 : Сентябрь 04, 2018, 03:18 »

т.к. в не-Qt-шных тредах нет евент лупа. Иначе - ССЗБ, читай доку.
бинго!

закономерный вопрос:
а нафига треду нужен ещё какой то костыль в придачу
в виде ниразу не очевидного эвент лупа?

PS: Можно все перевернуть с ног на голову, заявив, что, мол беру boost asio, и нифига не работает, т.к. там тоже есть луп/сервис (и его надо запускать),
а я не хочу его запускать, кочу юзать чтобы из QThread оно само работало. Мол, boost гавно, не работает в Qt.
дык, с асей то как раз таки проблем нет.
всмысле, она вполне себе дружит с тредами вообще.
наверное, это потому, что луп/сервис есть у аси, а не у тредов.
в тредах - чистая бизнес-логика.





Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #107 : Сентябрь 04, 2018, 03:21 »

> "главная нитка" - это к тем, кто в многопоточку не умеет.
Многопоточка для тех, кто асинхронный ввод/вывод не осилил.
а асинхронный ввод/вывод конечно же реализуется не на многопоточке, да?
Пачкование тредов это не есть хороший дизайн, это костыли. Так и тредов не хватит.  Улыбающийся

четкие поцаны юзают тред-пул.
и о боже! так реализуется асинхронка.


Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #108 : Сентябрь 04, 2018, 03:30 »

"главная нитка" - это к тем, кто в многопоточку не умеет.

Ну возьмите любую другую нитку - часто возникает задача передать управление в _определенный_ тред (обычно тот, который запускал задачу) без явного вызова wait().

лямбда-геттер жеж.
и пускай дергает, когда ему нужно из своего треда.
какие проблемы?

Код:
const auto getData = [](auto& src) { ... };
sample.setData(getData);

а вот пасти нужный тред,
что бы не дай боже, не дернуть что нибудь,
в каком нибудь другом - вот это уже не круто.

Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #109 : Сентябрь 04, 2018, 03:53 »

А что, Вы умеете обновлять UI из любой нитки (а не только главной)? Расскажите как, я так не умею  Улыбающийся
а зачем вообще об этом думать? вот есть какая нибудь библиотека. CEGUI например.
я тупо запускаю инстанс прямо в main (или в любом треде, где захочу). и забываю про него.
когда кто нибудь жмакнет закрытие окна, ну или просто пришлет событие о том,
что нужно сворачивать лавочку, я тупо дергаю этому инстансу "сворачивайся".
и все. он сам отлипнет, и его тред завершится.
а как он там у себя внутри свои потроха обновляет - это уже его личные проблемы.

сами виджеты я могу создавать/двигать/разрушать в любом треде, где мне удобно.
и мне не нужно вообще думать о том, как и когда ядро обновит эти изменения.
проблемы CEGUI его пользователей не колышат.

Речь идет о простейшем "выносе длинной операции в поток"(чтоб UI не замерзал) который здесь делают все кому не лень. Потому что - да, на Qt это легко и приятно. А вот как на std -хз.
делать гуй легко и приятно на любом высокоразвитом гуи-фреймворке.
а вот std к гую вообще не имеет никакого отношения.

Ни о каком тамошнем механизме обмена инфой между нитками я не знаю.
может вам с++ нужно подучить.
так то, вы можете заюзать глобальную переменную, например.

Мы увидим std реализацию этой простейшей задачки - или только понты типа
я уже выше привел примеры. для иллюстрации вполне сойдёт.
если в танке - ничем не могу помочь.
пилить с нуля gui на голых плюсах, разумеется я не буду.
мог бы наколбасить на голом MFC, например. но мне лень.
и о боже! MFC - это тоже оказывается своя экосистема.

У меня давно уже стойкое подозрение - человек "ниасилил" букварь. Развейте пожалуйста, очень не хочется разочаровываться в человеке  Плачущий
так это же вы в вашем примере выше зачем то колбасили наследование, с переопределением метода run.
наверное, зачем то это все таки вам было нужно сделать.

мой тезис остаётся в силе:
колбасить ещё один класс, только для того,
что бы тред запустить - напрасное раздутие кода,
неудобный, убогий дизайн.


Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #110 : Сентябрь 04, 2018, 06:44 »

а асинхронный ввод/вывод конечно же реализуется не на многопоточке, да?
Нет. Асинхронка может работать и в одном потоке.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #111 : Сентябрь 04, 2018, 14:08 »

я уже выше привел примеры. для иллюстрации вполне сойдёт.
если в танке - ничем не могу помочь.
пилить с нуля gui на голых плюсах, разумеется я не буду.
А делать какое-то UI никто и не просил. Можете взять мое, или просто печатать в консоль. Если создается нитка, то она должна хотя бы минимально общаться с другими. Запуск "на деревню дедушке" никому не нужен, придется так или иначе "мониторить" запущенную задачу. В Qt для этого есть удобный механизм, а в std - ни кола, ни двора.

мой тезис остаётся в силе:
колбасить ещё один класс, только для того,
что бы тред запустить - напрасное раздутие кода,
неудобный, убогий дизайн.
Да какой там "тезис" - так, мелочная претензия. Уже говорилось что run перекрывается только если хочется самому побаловаться с синхронизацией - пожалуйста, можно и так. Но делать это всякий раз - да кто Вам такое сказал? См мой пример в аттаче - никаких наследований от QThread там нет, нитке можно кинуть любое кол-во задач не прилагая никаких усилий. Можно просто запустить нитку без задач - и это ничем не грозит, и проц она не жрет. Можно удобно подсесть на сигналы завершения нитки и/или задачи. Вкусные плюшки. Наоборот, std-шный стиль запуска выглядит "каменным веком" - обязует заботиться обо всем самому. Ну спасибо хоть это дали, раньше вообще ничего не было.

В общем, в очередной раз убеждаюсь - изучение std отрицательно влияет на изучающего  Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #112 : Сентябрь 04, 2018, 17:05 »

а асинхронный ввод/вывод конечно же реализуется не на многопоточке, да?

Конечно нет, она реализуется на эвентлупе (select/poll/epoll/kqueue)
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #113 : Сентябрь 04, 2018, 17:06 »

лямбда-геттер жеж.
и пускай дергает, когда ему нужно из своего треда.
какие проблемы?


И как оно узнает, когда надо дергать? Поллинг сделать? Ну-ну.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #114 : Сентябрь 04, 2018, 17:13 »

мой тезис остаётся в силе:
колбасить ещё один класс, только для того,
что бы тред запустить - напрасное раздутие кода,
неудобный, убогий дизайн.

Мне кажется или вы читать не умеете? Третий раз на пишу - на момент написания QThread другого способа НЕ БЫЛО, а ваш хваленый стд ни тредов не имел, ни анордеред мапы.
Аналог std::function написать было нельзя потому что компиляторы не умели в шаблоны нормально.

Сейчас QThread нужен ТОЛЬКО для того чтобы крутить эвентлуп, НЕ НУЖНО перегружать run. Используйте для этого std::thread.
У них сейчас РАЗНЫЕ задачи.

Метод run есть ТОЛЬКО ДЛЯ СОВМЕСТИМОСТИ чтобы не сломать кучу кода.

Я как со стенкой разговариваю, ей-богу.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #115 : Сентябрь 04, 2018, 17:19 »

Кстати _Bers спалился что не опускался на уровень еполла и не писал сервак решающий "проблему 10к" Подмигивающий
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #116 : Сентябрь 04, 2018, 18:42 »

а асинхронный ввод/вывод конечно же реализуется не на многопоточке, да?
Нет. Асинхронка может работать и в одном потоке.

вы осознаете, что противоречите здравому смыслу?
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #117 : Сентябрь 04, 2018, 18:43 »

а асинхронный ввод/вывод конечно же реализуется не на многопоточке, да?

Конечно нет, она реализуется на эвентлупе (select/poll/epoll/kqueue)

которые реализуются за счет многопоточки. Карл.



Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #118 : Сентябрь 04, 2018, 18:45 »

лямбда-геттер жеж.
и пускай дергает, когда ему нужно из своего треда.
какие проблемы?


И как оно узнает, когда надо дергать? Поллинг сделать? Ну-ну.

баранку гну.
механизму нужно что то дергать.
механизм знает, когда и зачем ему это нужно.
ваш Кеп.
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #119 : Сентябрь 04, 2018, 18:49 »

мой тезис остаётся в силе:
колбасить ещё один класс, только для того,
что бы тред запустить - напрасное раздутие кода,
неудобный, убогий дизайн.

Мне кажется или вы читать не умеете? Третий раз на пишу - на момент написания QThread другого способа НЕ БЫЛО, а ваш хваленый стд ни тредов не имел, ни анордеред мапы.
Аналог std::function написать было нельзя потому что компиляторы не умели в шаблоны нормально.

Сейчас QThread нужен ТОЛЬКО для того чтобы крутить эвентлуп, НЕ НУЖНО перегружать run. Используйте для этого std::thread.
У них сейчас РАЗНЫЕ задачи.

Метод run есть ТОЛЬКО ДЛЯ СОВМЕСТИМОСТИ чтобы не сломать кучу кода.

Я как со стенкой разговариваю, ей-богу.

Мне кажется или вы читать не умеете?
самолеты нужны, что бы летать.
у них у всех одинаковая задача.

с std::thread всякие кутешные сокеты начнут лагать.

кутя без своего убогого лупа как бе не особо юзабельна.
тупо же, когда слоты-сигналы перестают слотиттить-сигналить

а что там было в бородатых - не суть важно.

та же ася например, не выносит моск своим эвентлупом.
он вообще упрятан так, что простому смертному о нем даже знать не обязательно.

Записан
Страниц: 1 ... 6 7 [8] 9 10 ... 17   Вверх
  Печать  
 
Перейти в:  


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