Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.10.2014, 00:03
NoSilence NoSilence вне форума
Прохожий
 
Регистрация: 11.09.2010
Сообщения: 6
Репутация: 10
По умолчанию Критическая секция

Добрый день.

Никак не могу додумать, как правильно её использовать.

Цитата:
Сообщение от MSDN
If a critical section is deleted while it is still owned, the state of the threads waiting for ownership of the deleted critical section is undefined.
Что значит thread state undefined?

Нужно ли при удалении критической секции сначала дождаться её освобождения?
Т.е.
EnterCriticalSection
DeleteCriticalSection

Если нет и критическая секция удаляется немедленно, то что становится с потоком УЖЕ находящимся в ней?
Ответить с цитированием
  #2  
Старый 24.10.2014, 06:19
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

С потоком будет не есть хорошо, немного теории
Цитата:
Сообщение от realcoding
...Наиболее простым в понимании является TCriticalSection или критическая секция. Код, расположенный в критической секции, может выполняться только одним потоком. В принципе код ни как не выделяется, а происходит обращение к коду через критическую секцию. В начале кода находится функция входа в секцию, а по завершению его выход из секции. Если секция занята другим потоком, то потоки ждут, пока критическая секция не освободится... Kритических секций может быть несколько. Поэтому при использовании нескольких функций, в которых могут быть конфликты по данным надо для каждой функции создавать свою критическую секцию. После окончания их использования, когда функции больше не будут вызываться, секции необходимо уничтожить методом free...
есть ещё мнение, что лучше загнать удаление в блок
Код:
...
try 

// здесь помещается "тяжёлый" код

finally 
 DeleteCriticalSection(CriticalSection);
end; 
...
Ответить с цитированием
  #3  
Старый 24.10.2014, 10:27
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

thread state undefined - означает, что может быть всё, что угодно
система не гарантирует ничего.
Вообще говоря, после разрушения критической секции система может назначить её дескриптор какому-нибудь другому объекту, и что при этом произойдёт?
Ответить с цитированием
  #4  
Старый 24.10.2014, 12:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Удаляй свободную секцию, only
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:43.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025