![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
Artemon |
|
||||||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Об этом и речь ![]() Да в вашем примере синфхронизация не нужна, но как вы поступите, если нам постоянно потребуется вести расчет в потоках и постоянно выводить результаты, это я к тому, что не возможно этот сделать без синхронизации.
Это субъективное мнение.
Про окно значит не сказано, а boost значит впорядке вещей получается ? Это сообщение отредактировал(а) Artemon - 11.3.2009, 12:00 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
||||||
|
|||||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
речь идет об одном конкретном примере, если будет что-то другое, то будет и другое решение. В данном случае, пока потоки не отработают, с массивом нельзя работать и никакие расчеты невозможны. Если, к примеру, нам нужно отсортировать полученный массив, нам придется ждать генерации всех элементов массива, затем начинать сортировку. Можно вместо сортировки вставлять элементы в бинарное дерево поиска, например std::set, тогда сортировать не нужно, но тогда нужно будет синхронизировать доступ к этому дереву. Добавлено через 1 минуту и 4 секунды в любом случае, обмен сообщениями между потоками - не самый эффективный механизм, особенно когда объем обрабатываемых совместно данных велик Добавлено через 3 минуты и 35 секунд кстати, для того что-бы использовать WM_COPYDATA нужно создавать окно, послать такое сообщение потоку нельзя вместо этого, я бы завел очередь, в одном потоке добавлял в нее данные, а из другого читал, ну и естественно оповещал бы поток - потребитель о приходе новых данных с помощью события... |
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Да, большой объем прогонять через WM_COPYDATA не эффективно.
Но еслиже у нас маленькое приложение и объем данных мизерный, то моему лучше сделать чрез WM_COPYDATA. Просьба не начинать спор с начала, думаю что все остались при своих мнениях. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Artemon, какие тогда преимущества дает многопоточность, если юзать WM_COPYDATA?
|
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
естественно никакие, так-как это сообщение можно послать только с помощь ф-ии SendMessage, которая работает синхронно... если и посылать сообщения потокам, то только через PostThreadMessage
|
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
На самом деле тему раздули - молодцы. Не проще ли автору посоветовать почитать Рихтера главу про потоки и их синхронизацию? На мой взгляд все достаточно доступно и доходчиво.
|
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
1. Если мы пишем для Windows, используя к примеру WinApi, у нас уже и так есть оконная процедура и с минимальными усилиями мы можем добавить обработку собщения WM_COPYDATA.
2. Если нам необходимо вывести данные из второстепенных потоков в окно.
И что с того, что можно послать только через SendMessage ? Если нужно работать с GUI, это очень даже приемлимый способ. У меня создалось впечатление, что вы думаете мое предложение - использовать взаимодействие через WM_COPYDATA между второстепенными потоками, нет это не так. Я передлагаю использовать WM_COPYDATA только для взаимодействия второстепенного и главного потоков для дальнейшего вывода информации в GUI. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Artemon, кроме GUI прог в винде есть еще и консольные проги, а еще есть проги без окна и без консоли
|
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Неужели? А еще есть драйвера, работающие в нулевом кольце. Которые тоже могут использовать потоки.
Только я не пойму вообще к чему это ты сказал. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
вообще-то, даже в GUI приложениях в основном потоки используют общие данные и синхронизируют их с помощью различных примитивов синхронизации, и ооочень редко используется WM_COPYDATA ![]() WM_COPYDATA обычно используют для организации взаимодействия процессов, тогда, когда оно должно-быть синхронным. |
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Вот ты мне объясни, зачем мне нужна синхронизация, если я один раз из потока в окно хочу одну строку вывести ? Мне очень удобно это сделать через SendMessage + WM_COPYDATA
Реальный пример: Программа, которая производит спам рассылку, у которой 4 потока: 1. Сбор IP 2. Проверка IP (является ли этот адрес прокси сервером) 3. Распознавание капчи 4. Основной поток. Все потоки синхронизованы через Mutex-ы И вот например случается событие в потоке проверки IP (№2), о котором мне необходимо информировать пользователя. Я беру и кидаю строку через SendMessage + WM_COPYDATA, в главном окне ловлю его и отображаю в поле статистики. Зачем мне сдалась какая-либо синхронизация, касающаяся вывода сообщений пользователю. //------------------------------------------------------------------------------------------- Про автора топика совсем забыл, у тебя GUI или консольное приложение ? Если GUI, то советую сделать так, как я предложил, если консольное - возьми исходник Лазина. Это сообщение отредактировал(а) Artemon - 11.3.2009, 15:11 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Artemon, ты жжошь
безусловно формошлепство накладывает некоторый оконный отпечаток на личность) Добавлено через 1 минуту и 2 секунды еще можно отправлять данные на почту по POP3 и читать от туда другим потоком |
|||
|
||||
Lazin |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
я хотел предложить записывать данные в файл одним потоком и читать их оттуда другим, но ты меня обошел))
![]() Добавлено через 3 минуты и 24 секунды с данной программой все просто, ее просто не надо писать ![]()
блин, откуда вы все знаете мою фамилию? ![]() |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |