![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Ребята у меня есть поток, который по нажатию кнопки я могу приостановить/запустить (банальный SuspendThread,ResumeThread)
Но вся проблема в том ,что этот поток как и основной поток приложения пользуется одним ресурсом (вызов некойфункции). Для защиты используются критические секции Вопрос. Как избежать такой ситуации: поток захватывает ресурс (делает EnterCriticolSection) а тут я его приостанавливаю, в результате чего остаюсь без ресурса. Заранее спасибо за советы. ![]() -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
делать остановку в критической секции.
как простейший вариант -- объявляем глобальную переменную и в основном потоке ( в критической секции ) проверяем ее. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Только вот в чем проблема, я не слушалась умных дядей и критическая секция у меня давольно большая.
Хотя, а я как-нибудь по самой переменной CRITICAL_SECTION определить занята ли она, если да то каким потоком, или может стоит так написать EnterCriticalSection(&cs); LeaveCriticalSection(&cs); SuspendThread(h); Помоему, идея не плохая, как ты думаешь -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
это во втором потоке? тогда как-то так:
EnterCriticalSection(&cs); LeaveCriticalSection(&cs); if ( shouldSuspend ) SuspendThread(h); которую ему нужно передать... Добавлено @ 18:55 и в догонку: в основном потоке можно еще одну секцию написать. и тормозить второй поток в ней ( так все-таки логичнее ) EnterCriticalSection(&cs); //большая секция LeaveCriticalSection(&cs); EnterCriticalSection(&cs); //второй блок SuspendThread(h); LeaveCriticalSection(&cs); -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |