![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Nudnik |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.9.2007 Репутация: нет Всего: нет |
У меня есть главный процесс и вспомогательный поток. Я создаю дочерний поток и он выполянет функцию sumFunc.
У меня имеется 2 критические секции (именно с помощью критических функций мне необходимо произвести синхронизацию). Функция delegateThread занимается взаимодействием с потоком. Необходимо, чтобы поток с sumFunc работал постоянно, а когда нужно было выполнить содержимое функции sumFunc, то я бы вызывал delegateThread(). В главной функции (mainLogic) я 3 раза вызываю delegateThread и соответственно хочу, чтобы 3 раза исполнилось содерджимое функции sumFunc то есть:
То есть должен вывести: SUM SUM SUM Подскажите, как правильно в delegateThread и sumFunc расставить вход / выход в критические секции? |
||||
|
|||||
| korian |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 4 Всего: 17 |
что-то вы нереальное хотите помоему.
критические секции для обеспечения доступа к данным, а то что вы хотите я вообще не понимаю.
такое можно сделать примерно так:
Добавлено через 6 минут и 58 секунд а если вы хотите чтобы ваш код работал, надо Sleep расставлять, и все равно это не будет гарантировать правильную работу во всех случаях. |
||||
|
|||||
| Nudnik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.9.2007 Репутация: нет Всего: нет |
Да, Sleep не даёт никаких гарантий. Просто у меня задача такова, что есть главный поток есть дочерний поток, который постоянно работает. Я из главного обращаюсь к дочернему, последний выполняет операции и в конце передает управление обратно главному. И так к дочернему потоку я могу обращаться много раз. Синхронизацию сделать обязхательно через критические секции.
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
Nudnik,
Тебе надо, что бы поток висел в памяти, желательно не занимая процессорного времени, а при наступлении события (команды) выполнял некие действия. Для этого используется Event. Читай про WaitFor...() функции. А критические секции и т.п. блокировки используются для обеспечения целостности доступа к данным. |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 4 Всего: 17 |
сделать можно так:
но как сказал baldina, для этого лучше использовать WaitFor... функции.
Это сообщение отредактировал(а) korian - 29.3.2008, 14:38 |
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
Это странно. Хотя и возможно - korian тебе показал как.
Добавлено через 43 секунды korian, пока я писал, ты уж тут |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |