powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / взаимодействие между потоками, сигнал из одного потока в другой
25 сообщений из 73, страница 1 из 3
взаимодействие между потоками, сигнал из одного потока в другой
    #38323711
Medvedev_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Суть задачи в следующем: Есть поток, который получает данные, раз в 100 мс примерно. Есть воторой поток, который отображает данные в графическом виде. Как сделать так, чтобы при получении данных первым потоком, он давал команду второму потоку отобразить их?
Я побывал так: поток, отображающий данные работает в бесконечном цикле, на каждом шаге цикла проверяет, пришли ли новые данные от потока получения или нет. Но, это не рационально..цикл требует ресурсов. Как лучше сделать?
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38323866
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Medvedev_AКак лучше сделать?
Ты бы хоть ОС назвал... В Windows, например "отображающий поток" это обычно главный поток,
который поддерживает GUI и крутит цикл выборки сообщений. Следовательно наиболее
естественный способ его уведомления - посылка сообщения через SendMessage или PostMessage.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38323920
Medvedev_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, windows, спасибо попробую так, как вы указали.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38324799
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Medvedev_A,

Эээ... Как бы указанный способ далеко не самый лучший.

0) ни в коем случае нельзя использовать SendMessage. SendMessageTimeout или аналоги, или postMessage.

1) обновлений может прийти несколько, но видимо показывать есть смысл только одно, последнее. Также обновление бессмысленно показывать, если в данный момент пользователь что-то делает — главный поток может либо вообще ничего не ответить, либо обновление вклинится посреди действий пользователя.
Поэтому в идеале надо обновляться по таймеру или по idle. Читающий поток кладет нужные данные в "гнездо", и возводит флаг, что данные новые, главный поток в очередной раз выходит на iddle, проверяет флаг, и выполняет обновление.
"гнездо" необходимо защищать.

Ну и 100 миллисекунд — это очень часто.
Это порядок времени кадровой развертки телевизора.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38324805
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv100 миллисекунд — это очень часто.
Это порядок времени кадровой развертки телевизора.
Бредишь. 100мс это 10fps. Кадровая у телевизора это 60fps.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38324819
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovБредишь. 100мс это 10fps. Кадровая у телевизора это 60fps60/10 = 6
В порядок величины - да, уложился :)

P.S. И как только винда успевает автоповтор клавиатуры и движения мыши обрабатывать ...
Не иначе как секретные технологии хардкордных прогеров ...
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38324918
Фотография vromanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В окне сделать таймер. По приходу сообщения от процесса - ставить флаг, что данные появились. В обработчике таймера пересовывать. Частоту таймера можно регулировать, например UI. Т.е. пользоваетль сам сможет выбрать, как часто ему обновлять данные.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38324928
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZiv100 миллисекунд — это очень часто.
Это порядок времени кадровой развертки телевизора.
Бредишь. 100мс это 10fps. Кадровая у телевизора это 60fps.


Я говорил "порядок".

Не 60 FPS, а 25. Это стандартное телевизионное значение.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38324975
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе 60 FPS, а 25. Это стандартное телевизионное значение.У стандарта SECAM - 50 полукадров.
24 - только в кино.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38325014
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovMasterZivНе 60 FPS, а 25. Это стандартное телевизионное значение.У стандарта SECAM - 50 полукадров.
24 - только в кино.

Ну и чё?
Это меняет что -то?
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38325070
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНу и чё?
Это меняет что -то?Конкретные цифры - да, порядок величин - нет, постулат "посылать сообщения десять раз в секунду - очень часто" - всё равно остаётся сомнительным.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38325113
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Не посылать сообщения, а обновлять информацию.
Я ж говорю, тут скорость поступления информации сравнима с максимальной скоростью, с которой глаз что-то может воспринимать, а наверное ещё и мозг что-то успевать сделать должен.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38325182
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ ж говорю, тут скорость поступления информации сравнима с максимальной
скоростью, с которой глаз что-то может воспринимать, а наверное ещё и мозг что-то успевать
сделать должен.
Бедный мозг неспособен воспринимать 10 кадров в секунду? Автор же не сказал что
представляют его "данные" и как они отображаются. Может, данные это одно целое число, а
отображается это в виде ползущей точки как на осциллографе. Ты способен воспринимать
информацию с осциллографа?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38325250
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivа наверное ещё и мозг что-то успевать сделать должен.
мозг - разный, 60 fps бывает недостаточно (не только в игрушках)
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38325336
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
Н-да... Холивар однако. Про автора топика и вопрос уже забыли напрочь...

Автору: читать http://msdn.microsoft.com/en-us/library/windows/desktop/ms682052(v=vs.85).aspx

Бойцам: я бы вас понял, если бы обсуждали работу с таймером на микросекунды. А остальное все - бред и спор не о чём.
Это не нагрузка даже на проц с тактовой в 20 мгц...
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38326830
Medvedev_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вообще, если я хочу из одного потока послать данные в другой...как это быстрее всего сделать? SendMessage?
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38326834
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Medvedev_Aкак это быстрее всего сделать?
Если говорить о чистой скорости, то быстрее всего этого вообще не делать: обрабатывать их
в том же потоке, где получены.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38326836
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
Medvedev_Aа вообще, если я хочу из одного потока послать данные в другой...как это быстрее всего сделать? SendMessage?
Ссылка на общие данные. Контроль доступа - мьютекс.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38327182
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Medvedev_Aа вообще, если я хочу из одного потока послать данные в другой...как это быстрее всего сделать? SendMessage?

Вообще-то потоки специально придуманы, чтобы этого никогда не нужно было делать.
Память у потоков одна и та же, ничего никуда посылать не надо.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38327184
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zMedvedev_Aа вообще, если я хочу из одного потока послать данные в другой...как это быстрее всего сделать? SendMessage?
Ссылка на общие данные. Контроль доступа - мьютекс.

Между потоками лучше -- критическая секция. В windows.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38327213
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
MasterZivzпропущено...

Ссылка на общие данные. Контроль доступа - мьютекс.

Между потоками лучше -- критическая секция. В windows.

Критическая секция - вариант мьютекса, где по сути невозможно выполнение какого то кода одновременно несколькими потоками, напр. доступа к данным.
В чем будет преимущество по сравнению с "классическим" вариантом мьютекса для данной задачи?
Да и насчет того, что память у потоков одна и та же... В принципе - да, одни и те же мелкосхемы юзаются
Но логически - это как напишешь. Потоки даже если это одни и те же методы одного и того же класса можно по разному организовать... Напр. никто не запрещает разместить данные непосредственно в самом методе (как один из примеров).
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38327302
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМежду потоками лучше -- критическая секция. В windows.

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

СОГЛАСЕН.
Но в мире Windows мьютекс -- это то, что созадют CreteMutex, а неокрепшие умы не все знают, что есть ещё критические секции, и они -- тоже мьютексы.

авторВ чем будет преимущество по сравнению с "классическим" вариантом мьютекса для данной задачи?

Быстрее. Вообще, если не нужно межпроцессное взаимодействие, то по умолчанию в WinXX надо использовать секции.

авторДа и насчет того, что память у потоков одна и та же... В принципе - да, одни и те же мелкосхемы юзаются
Но логически - это как напишешь. Потоки даже если это одни и те же методы одного и того же класса можно по разному организовать... Напр. никто не запрещает разместить данные непосредственно в самом методе (как один из примеров).

Логически. У потоков. Память. Одна. Даже та, которая в методе одного потока, доступна (и слава Богу!) из другого потока.
Поэтому я и пишу -- ПАМЯТЬ ОДНА. Потому что она одна.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38327356
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
MasterZiv,

Я запустил 2 независимых потока одного и того же метода. Массив (например) выделен в САМОМ МЕТОДЕ (читай фунуции), нет описателя в "заголовке класса". И ?
Посмотри карту heap...

Но может и не стоило этого писать, типа вредно для неокрепших умов...
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38327491
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zMasterZiv,

Я запустил 2 независимых потока одного и того же метода. Массив (например) выделен в САМОМ МЕТОДЕ (читай фунуции), нет описателя в "заголовке класса". И ?


Ну и что "И", это такая же память, как и любая другая. Передай ссылку на нее в другой поток как-то — будет доступна.
...
Рейтинг: 0 / 0
взаимодействие между потоками, сигнал из одного потока в другой
    #38327498
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z,

Ты из недоступности переменной делаешь вывод о недоступности памяти. Это неверно. Память и переменные — разные вещи, к сожалению. Переменная размещается в памяти, и может быть не видна где-то ни непосредственно, ни опосредованно, через ссылки, но даже в этом случае память этой переменной видна и доступна всем потокам данного процесса. А если на эту память, на эту переменную передать другому потоку ссылку, то вот она и будет видна...
...
Рейтинг: 0 / 0
25 сообщений из 73, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / взаимодействие между потоками, сигнал из одного потока в другой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]