170 похожих чатов

Есть 2 отдельных потока. Один пишет в массив/очередь, другому нужно

при поступлении новых данных в этот массив/очередь - сразу их начать обрабатывать.

Сейчас это решено через while , в котором постоянно идет проверка нет ли новых данных. Но даже со sleep - бесконечность while слишком грузит проц. Да и как то кривовато мне кажется решение со sleep-ами.

Как можно подать знак второму потоку что пора ему считать данные? Чтобы он не грузил проц в постоянном проверянии обновлений?

18 ответов

4 просмотра

Предложение немного из другой степи, но на qt подобное реализуется через сигнально слотовую систему. Говорят, что это паттерн наблюдатель. А если на десктоп пишешь программу обработки данных по ком порту и ещё не поздно, то советую смотреть в сторону qt, как сделал однажды я =) такие вопросы из коробки решаются

jon pedro
Предложение немного из другой степи, но на qt подо...

Да, проще всего будет решить проблему через этот паттерн

Виктор-Nekrasov Автор вопроса
jon pedro
Предложение немного из другой степи, но на qt подо...

Понял, спасибо. Как раз за изучение qt взялся. Переделывать поздновато, но, на поздних стадиях реализации столкнулся с тем что комп дико тормозить начинает. Так что придется. Кстати, по результатам испытаний, раюота с массивами примерно на 30% быстрее оказалась, чем работа с векторами. И памяти меньше ест.

Виктор Nekrasov
Понял, спасибо. Как раз за изучение qt взялся. Пер...

Я бы не закладывался на твои бенчмарки, да и странно сравнивать работу с массивом и вектором — они для разных целей

Виктор Nekrasov
Почему не закладывался бы?

Потому что бенчмарки легко сделать неправильно и сложно правильно

Без ивентов ты это не сделаешь без бизи вейта, а ивентов нет в стандарте, Хотя конечно можно через атомики ещё... Не, нельзя

mutex + condition variable + atomic_bool

Виктор-Nekrasov Автор вопроса
Ilya Zviagin
Чета как бред звучит

Что именно как бред звучит?

Виктор Nekrasov
Что именно как бред звучит?

что работа с массивами на 30% быстрее, чем с векторами

Виктор-Nekrasov Автор вопроса
Alexander "SonnySlave" Zaitsev
что работа с массивами на 30% быстрее, чем с векто...

Почему? Вектор, вроде более сложная структура, больше памяти занимает. И лежит в куче, а не на стеке.

Виктор Nekrasov
Почему? Вектор, вроде более сложная структура, бол...

ну я хз, что такое "работа" в твоём случае, но даже эта разница играть роли не должна

Виктор Nekrasov
Что именно как бред звучит?

Вот это Кстати, по результатам испытаний, работа с массивами примерно на 30% быстрее оказалась, чем работа с векторами. И памяти меньше ест

Ilya Zviagin
Вот это Кстати, по результатам испытаний, работа...

+ Ну вот, теперь неделю спать не смогу, буду думать что такого мог джун (да пусть даже мидл) сделать с массивами, что оно аж на треть быстрее чем с векторами. Наверное, пора уже мыслить как сеньеру и спрашивать: что он такое творит с векторами, что они у него такие медленные?

Mikhail Kalugin
+ Ну вот, теперь неделю спать не смогу, буду думат...

Говнокод написать - дело нехитрое. Бросил в тело цикла создание вектора, вместо массива - вот, уже деградация

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
83
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Вопрос вроде правильно, но что надо сделать, чтоб текст был виден нормально ? ghci> TE.decodeUtf8 $ TE.encodeUtf8 "test - проба" "test - \1087\1088\1086\1073\1072"
Fedor
7
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Карта сайта