![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Совет по использованию критических секций. [D7, XP]
Alex_C © (2011-06-04 16:21:00)Есть очень большая и глобальная программа. В этой программе есть много (эдак около 10) отдельных тредов пполучения данных из инета, телнета, данных с оборудования. Естественно получение и обработку полученных данных нужно согласовать.
Я не являюсь проф. программистом, и все данные я читаю в книжках и в инете. Большое спасибо СереюМ - здешнему пользователю , который эпизодически наставляет меня на путь истинный :)
Теперь к делу: согласование получения и обработки данных я использую критические секции.
Вотпросы на которые я не смог найти ответов в литературе:
1. Для каждого независимого потока нормально что я использую отдельную критическую секцию, если с другими потоками он не завязан?
2. Можно ли в основном потоке использовать критические секции? Или только метод Synchronize из потоков?
3. Мне в потоке нужно подождать некоторого действия. Application.ProcessMessage использовать нельзя. Что лучше?
Ega23 (2011-06-04 16:33:00) [21]Крит.секция нужна для защиты целостности. Допустим, один поток читает массив, а второй его в этот момент изменяет. Нехорошо.
Если только чтение - то можно и без крит.секций. Если с изменением, то тогда нужно.
И ещё момент: крит.секция не принадлежит контексту какого-либо потока, она отдельно, сама по себе существует.
_Юрий (2011-06-04 16:29:00) [22]
> 1. Для каждого независимого потока нормально что я использую
> отдельную критическую секцию, если с другими потоками он
> не завязан?
Если поток "не завязан с другими", крит секции не нужны.
> 2. Можно ли в основном потоке использовать критические секции?
> Или только метод Synchronize из потоков?
Критические секции всегда используются разными потоками. Если секцию использует только один поток, в ней нет никакого смысла. Является ли поток главным или нет - с т. зр. крит секции неважно.
> 3. Мне в потоке нужно подождать некоторого действия. Application.
> ProcessMessage использовать нельзя. Что лучше?
WaitForSingleObject
или же организовать очередь сообщений, и ждать сообщеня в стандартном цикле обработки
while GetMessage(...) ...