![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
всем привет!
пытаюсь передать в процесс массив структур :
Это сообщение отредактировал(а) box - 31.1.2015, 23:49 |
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Всё просто: main()
monitor()
Несколько замечаний:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
насчет индекса согласен
в структуре B лежат мапы и переменные разные, шеред мемори 8 потоков собирают инфу в мапы и переменные а один разруливает что куда Это сообщение отредактировал(а) box - 1.2.2015, 01:05 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
У Вас на каждый поток отведено NUM_THREADS структур B. А на NUM_THREADS потоков таких структур будет уже (NUM_THREADS*NUM_THREADS). Так и задумано? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| box |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
не получактся, надо получить доступ на чтение и запись в структуру td из потоков PrintHello_monitor и PrintHello а когда я пишу в потоках PrintHello :
а читаю в потоке PrintHello_monitor :
то td[0].test всегда 0.
|
||||||
|
|||||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Что именно? Что Вы хотите сделать? Поток PrintHello_monitor создается первым и успевает отработать до создания других потоков. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
первый то первый но он же не останавливается на этом а продолжает получать данные , значит он должен получить данные td[0].test позже когда остальные потоки подключатся, но этого не происходит, почему?
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
По приведенному коду этого не видно. Потом, Вы отправляете в поток PrintHello в качестве аргумента значение &td[i]. То есть внутри этих потоков указывает каждый раз на свою область памяти. Когда в этом потоке Вы делаете (что тупо эквивалентно td->test = 100;) Вы записываете значение 100 в ячейку памяти td[i].test, где td - массив структур thread_data из стартового потока. А в поток PrintHello_monitor Вы отправляете адрес массива структур &td (который, на Ваше счастье, совпадает с самим td), и в этом потоке рапечатываете td[0].test - значение, которое никак не меняется в создаваемых потоках. Как было 0, так и остаётся. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
ну я вообщем то так и думал, а что же делать ? надо иметь доступ к структуре из любого треда
|
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Решений масса. Начиная от глобальной переменной
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
не понимаю каково практическое применение от ввода доп поля? приведите пожалуйста пример
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
У Вас потоки PrintHello имеют доступ только к одному элементу начального массива td, так они смогут иметь доступ ко всему массиву (состоящего из NUM_THREADS структур thread_data). В том числе и к полю td[0].test, которое печатает PrintHello_monitor. Вообще, наш разговор походит на беседу глухого со слепым. Я не понимаю, что Вы хотите сделать. Я не понимаю, какой смысл Вы вкладываете в эту фразу: если не видите профита от введения дополнительного поля. Я так до сих пор и не понял этого:
Я не понимаю, зачем Вы массив назвали именем td, таким же, как и отдельные экземпляры структуры thread_data в создаваемых потоках. Путаницы от этого немерено. Не экстрасенс я, никак -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| box |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 27.2.2007 Репутация: нет Всего: 0 |
насчет того что структур B будет (NUM_THREADS*NUM_THREADS) не согласен ибо для каждого треда создается один экземпляр структуры и соответсвенно и по одному экземпляру всех вложенных структур.
мне надо всего лиш протянуть нити ввиде общей структуры от всех и каждого потока в один единственный управляющий поток, я конечно понимаю что реализовать сие без помощи мютексов будет весьма проблематично ибо данные приходят ассинхронно но хотя бы и с мютексами тоже былоб не плохо , по поводу общей структуры td - не лучший вариант ибо тогда все нити потянутся к одному не рабочему треду что был родителем всех процессов и тем самым повлечет за собой черезмерную нагрузку на один + один рабочий тред, мне же надо максимально распаралелить (в каждом треде свои контейнеры и переменные) все данные во всех тредах , так вот как провести нить из каждого треда ввиде структуры в управляющий тред ? |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Ваше согласие или несогласие к делу не пришьешь - в коде, который вы написали, структур B ровно NUM_THREADS*NUM_THREADS штук (в 31 строке NUM_THREADS структур thread_data, каждая из которых содержит NUM_THREADS структур B - см строку 5)
Вы уверены, что вам нужна именно одна общая структура? Что в ней должно содержаться? Ибо ваше желание -
|
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |