58 / 58 / 6
Регистрация: 10.07.2011
Сообщений: 229
|
|
1 | |
Многопоточность26.10.2011, 13:01. Просмотров 1713. Ответов 9
Метки нет Все метки)
(
Имеется приложение на Си в VS 2008.
Приложение может создать большое количество экземпляров клиента для разных серверов (named pipes) одновременно. Максимальное количество клиентов определяется константой, но текущее количество клиентов может быть любое (не больше константы). Планируется запускать для каждого клиента отдельный поток. Выделю слово экземпляры, т.е. функция создания клиента и опроса приема сообщения у всех одна с разными аргументами. Для запуска потока для одного клиента нужно создать функцию, например, void ThreadClient1(void* pParams) и запустить её через beginthread(...). А если потоков будет 100, не буду же я создавать 100 таких функций. Подскажите возможности и идеи реализации. Не имею большого опыта с многопоточностью. Спасибо
0
|
|
26.10.2011, 13:01 | |
Многопоточность Многопоточность C++ Многопоточность THREAD.H (многопоточность) |
|
![]() 7175 / 3234 / 77
Регистрация: 17.06.2009
Сообщений: 14,165
|
|
26.10.2011, 14:02 | 2 |
Запускай одну и ту же функцию с разными параметрами
Код у них один и тот же - то есть функция одна и та же Для учета всех запущенных потоков можно завести массив на 100 элементов
1
|
58 / 58 / 6
Регистрация: 10.07.2011
Сообщений: 229
|
|
26.10.2011, 14:07 [ТС] | 3 |
0
|
![]() 7175 / 3234 / 77
Регистрация: 17.06.2009
Сообщений: 14,165
|
|
26.10.2011, 14:16 | 4 |
Фактически в обычной программе у тебя есть одна точка выполнения программы В многопоточной программе у тебя есть много точек выполнения Так что вполне может быть запущено 10 одинаковых функций - в каждой функции своя точка выполнения кода (разная) Но в связи с этим в многопоточной программы вылезают другие проблемы - синхронизация разных потоков - необходимость блокировки переменных когда к переменной имеет доступ несколько потоков одновременно Добавлено через 1 минуту Блокировка общих переменных, массивов, структур - вообщем всего чего угодно
0
|
58 / 58 / 6
Регистрация: 10.07.2011
Сообщений: 229
|
||||||
27.10.2011, 13:49 [ТС] | 5 | |||||
Добавлено через 23 часа 8 минут
Так, все-таки проблемы появились.
Хммм... нельзя в одном потоке создавать мьютекс и выполнять функцию WaitForSingleObject ?
0
|
![]() 7175 / 3234 / 77
Регистрация: 17.06.2009
Сообщений: 14,165
|
|
27.10.2011, 15:24 | 6 |
hMutex должен быть глобальный
Иначе сам создал - сам залочил - сам разлочил Другие треады и не видят этот mutex ;-) Using Mutex Objects http://msdn.microsoft.com/en-u... 85%29.aspx
1
|
58 / 58 / 6
Регистрация: 10.07.2011
Сообщений: 229
|
|
28.10.2011, 14:51 [ТС] | 7 |
хэндл глобальный. Немного не понимал как работает мьютекс, сейчас только доходит.
Спасибо за помощь. Но это еще не все вопросы ![]() Добавлено через 22 часа 57 минут Если у одной функции много разных точек доступа (потоков с разными параметрами), можно ли как-нить отследить закономерность обращения потоков к функции? Или случайным образом?
0
|
28.10.2011, 16:01 | 8 |
Насчет случайного ... вообще не понял о чем речь. Обращения можно отслеживать, например, из вызывающих функций. Можно из самой вызываемой функции. Interlocked Variable. Если нужен учет вызывающих функций, то, например, передаем параметром имя (или ID). Вообще и другие варианты существуют
0
|
58 / 58 / 6
Регистрация: 10.07.2011
Сообщений: 229
|
||||||
28.10.2011, 19:27 [ТС] | 9 | |||||
Про точки доступа пару сообщений выше, товарищ odip писал, поэтому я дословно выразился.
есть функция
Запустил я все 20 потоков. Ставлю брейкпоинт на ReleaseMutex и вижу, что при каждой остановке ID рандомно разный, ну т.е. не последовательно меняется. Вот, что я и спрашивал. Я хотел узнать, есть ли какая-нить закономерность в доступе потоков к функции... Получается, что нету. А может они работают параллельно? Или мне стоит прочитать где-нить хорошую статью про многопоточность?
0
|
110 / 111 / 18
Регистрация: 11.03.2011
Сообщений: 421
|
|
29.10.2011, 18:50 | 10 |
0
|
29.10.2011, 18:50 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Многопоточность в MFC Простое приложение для MFC, использующее многопоточность Многопоточность в Windows.Forms: вопрос реализации в общем [Многопоточность] Как в функцию, которая будет выполняться в отдельном потоке, передать нужные аргументы? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |