Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки, Куда прикрутить потоки 
:(
    Опции темы
Lazin
Дата 11.3.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(C/L @  11.3.2009,  10:27 Найти цитируемый пост)
наверно это и есть синхронизация, только посредством tasks.join_all()

рабочие потоки в данном случае синхронизировать ну нужно, только основной поток
PM MAIL Skype GTalk   Вверх
Artemon
Дата 11.3.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Цитата

синхронизировать ну нужно,

Об этом и речь smile

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


Цитата

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


Это субъективное мнение.

Цитата

и где вообще сказано что в программе должно быть окно?


Про окно значит не сказано, а boost  значит впорядке вещей получается ?



Это сообщение отредактировал(а) Artemon - 11.3.2009, 12:00


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
mrbrooks
Дата 11.3.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(Artemon @  11.3.2009,  11:54 Найти цитируемый пост)
Про окно значит не сказано, а boost  значит впорядке вещей получается ?

у Lazina - да. Я к этому уже привык.  smile 
PM MAIL   Вверх
Lazin
Дата 11.3.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(Artemon @  11.3.2009,  11:54 Найти цитируемый пост)
но как вы поступите, если нам постоянно потребуется вести расчет в потоках и постоянно выводить результаты, это я к тому, что не возможно этот сделать без синхронизации

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

Добавлено через 1 минуту и 4 секунды
в любом случае, обмен сообщениями между потоками - не самый эффективный механизм, особенно когда объем обрабатываемых совместно данных велик

Добавлено через 3 минуты и 35 секунд
кстати, для того что-бы использовать WM_COPYDATA нужно создавать окно, послать такое сообщение потоку нельзя
вместо этого, я бы завел очередь, в одном потоке добавлял в нее данные, а из другого читал, ну и естественно оповещал бы поток - потребитель о приходе новых данных с помощью события...
PM MAIL Skype GTalk   Вверх
Artemon
Дата 11.3.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



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


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
GoldFinch
Дата 11.3.2009, 13:00 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Artemon, какие тогда преимущества дает многопоточность, если юзать WM_COPYDATA?
PM MAIL ICQ   Вверх
Lazin
Дата 11.3.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



естественно никакие, так-как это сообщение можно послать только с помощь ф-ии SendMessage, которая работает синхронно... если и посылать сообщения потокам, то только через PostThreadMessage
PM MAIL Skype GTalk   Вверх
mrbrooks
Дата 11.3.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



На самом деле тему раздули - молодцы. Не проще ли автору посоветовать почитать Рихтера главу про потоки и их синхронизацию? На мой взгляд все достаточно доступно и доходчиво.
PM MAIL   Вверх
Artemon
Дата 11.3.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



1. Если мы пишем для Windows, используя к примеру WinApi, у нас уже и так есть оконная процедура и с минимальными усилиями мы можем добавить обработку собщения WM_COPYDATA.

2. Если нам необходимо вывести данные из второстепенных потоков в окно.

Цитата

естественно никакие, так-как это сообщение можно послать только с помощь ф-ии SendMessage,


И что с того, что можно послать только через SendMessage ?
Если нужно работать с GUI, это очень даже приемлимый способ.

У меня создалось впечатление, что вы думаете мое предложение - использовать взаимодействие через WM_COPYDATA между второстепенными потоками, нет это не так. Я передлагаю использовать WM_COPYDATA только для взаимодействия второстепенного и главного потоков для дальнейшего вывода информации в GUI.



--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
GoldFinch
Дата 11.3.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Artemon, кроме GUI прог в винде есть еще и консольные проги, а еще есть проги без окна и без консоли
PM MAIL ICQ   Вверх
Artemon
Дата 11.3.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Неужели? А еще есть драйвера, работающие в нулевом кольце. Которые тоже могут использовать потоки.

Только я не пойму вообще к чему это ты сказал.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Lazin
Дата 11.3.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(Artemon @  11.3.2009,  14:34 Найти цитируемый пост)
Неужели? А еще есть драйвера, работающие в нулевом кольце. Которые тоже могут использовать потоки.

вообще-то, даже в GUI приложениях в основном потоки используют общие данные и синхронизируют их с помощью различных примитивов синхронизации, и ооочень редко используется WM_COPYDATA smile 
WM_COPYDATA обычно используют для организации взаимодействия процессов, тогда, когда оно должно-быть синхронным.
PM MAIL Skype GTalk   Вверх
Artemon
Дата 11.3.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 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
PM MAIL   Вверх
GoldFinch
Дата 11.3.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Artemon, ты жжошь
безусловно формошлепство накладывает некоторый оконный отпечаток на личность)

Добавлено через 1 минуту и 2 секунды
еще можно отправлять данные на почту по POP3 и читать от туда другим потоком
PM MAIL ICQ   Вверх
Lazin
Дата 11.3.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(GoldFinch @  11.3.2009,  15:20 Найти цитируемый пост)
еще можно отправлять данные на почту по POP3 и читать от туда другим потоком 

я хотел предложить записывать данные в файл одним потоком и читать их оттуда другим, но ты меня обошел))
Цитата(MSDN)

An application sends the WM_COPYDATA message to pass data to another application.
еще вопросы? smile

Добавлено через 3 минуты и 24 секунды
Цитата(Artemon @  11.3.2009,  14:58 Найти цитируемый пост)
Программа, которая производит спам рассылку, у которой 4 потока:

1. Сбор IP
2. Проверка IP (является ли этот адрес прокси сервером)
3. Распознавание капчи
4. Основной поток.

Все потоки синхронизованы через Mutex-ы

И вот например случается событие в потоке проверки IP (№2), о котором мне необходимо информировать пользователя. Я беру и кидаю строку через SendMessage + WM_COPYDATA, в главном окне ловлю его и отображаю в поле статистики.

Зачем мне сдалась какая-либо синхронизация, касающаяся вывода сообщений пользователю.

с данной программой все просто, ее просто не надо писать smile 

Цитата(Artemon @  11.3.2009,  14:58 Найти цитируемый пост)
Если GUI, то советую сделать так, как я предложил, если консольное - возьми исходник Лазина.

блин, откуда вы все знаете мою фамилию? smile 

PM MAIL Skype GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.