Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

как лучше организовать ожидание в потоке?   Найти похожие ветки 

 
SergeyDon   (2005-07-18 15:41) [0]

есть поток с "сокетами" которые обрабатывают входящую информацию,  сама процедура T...Thread.Execute ничего недолжна делать кроме как ждать когда прейдет команда (от пользователя или системы) завершить поток (желательно минимально использовать процессорное время).
По приходу команды надо закрыть сокеты (знаю как сделать) и уничтожить поток (тоже вроде понятно).
Сейчас так:

procedure T…Thread.Execute;
begin
 while true do
 begin
  sleep(20);
 end;
end;


 
Fay ©   (2005-07-18 15:51) [1]

2 SergeyDon   (18.07.05 15:41)
WaitForSingleObject и т.п.


 
Digitman ©   (2005-07-18 16:10) [2]


> сама процедура T...Thread.Execute ничего недолжна делать


неразумно.
крайне.

весь смысл доп.потока в том чтобы "что-то делать", параллельно с прочими кодовыми потоками процесса


 
SergeyDon   (2005-07-18 16:27) [3]

WaitForSingleObject - что должно ожидать? а если надо на паузу поставить?

MsgWaitForMultipleObjects(..., ,INFINITE,QS_ALLINPUT) тоже не ловит сообщение "поток на паузу" и "поток стоп"


 
SergeyDon   (2005-07-18 16:38) [4]

to Digitman: Он "поток" и делает создаёт сокет который в свою очередь и обрабатывает все запросы и посылает ответы! А поток создавший сокет просто висит!
или так неправильно?


 
ZlDoc ©   (2005-07-18 16:39) [5]

WaitForSingleObject Ожидает установки обекта события, которое самому нужно создавать(CreateEvent), и когда нужно устанавливать (SetEvent).


 
Digitman ©   (2005-07-18 16:43) [6]


> Он "поток" и делает создаёт сокет который в свою очередь
> и обрабатывает все запросы и посылает ответы! А поток создавший
> сокет просто висит!


галиматья какая-то..

о проблеме в КАКОМ потоке ты ведешь речь - ТРАНСПОРТНОМ потоке (тот который собственно и ведет обмен с клиентом) или АКЦЕПТИРУЮЩЕМ потоке (тот который создает ТРАНСПОРТНЫЕ потоки) ?


 
SergeyDon   (2005-07-18 17:09) [7]

поток приложения (основной)
\- поток 1 (созданный и управляемый основным потоком)
\- поток 2 (созданный и управляемый основным потоком)

поток 1 - создан для выполнения опроса состояния оборудования подключенного к "Com-портам" системы, с записью информации в файл.

поток 2 - создан для связи и обмена информацией с удалёнными клиентами. Поток 2 использует сокеты (точнее компоненту TTcpServer). сам компанент является "событийным" и обрабатывает получение и прием данных в собственном потоке (моё мнение), и ему не важно что там делает поток создавший его, важно что бы этот поток не уничтожил компонент. Если я ставлю поток на паузу то TTcpServer всеравно продолжает работать (проверено) получая и отсылая запросы пользователя/лю. Поскольку потоку 2 нечего делать и возник вопрос:
как правильно организовать его Execute, что-бы и пауза обработалась и минимально использовать процессорное время?


 
SergeyDon   (2005-07-18 17:21) [8]

на паузу ставлю поток 2


 
Digitman ©   (2005-07-18 17:30) [9]

за TTCPServer ничего не скажу - не пользовал и не вникал в эту переходную ерунду.


 
SergeyDon   (2005-07-18 17:39) [10]

если создавать свои события, как это смотрится со стороны?
В том смысле, что если мой код будет смотреть другой (возможно более грамотный) человек программист он не будет улыбаться и говорить «ДА!» это кто же тебя так учил :)?

Плодить Evets/Mutex/Sema… это хорошо?

PS я сам «самоучка»!


 
Digitman ©   (2005-07-18 17:43) [11]


> SergeyDon   (18.07.05 17:39) [10]


это нормально, если это оправдано.

в сомнительных (с т.з. "мультипоточности компонента") местах при его отладке всегда контролируй истинность выражения GetCurrentThreadId = MainThreadId

это МНОГОЕ даст в понимании происходящего в конкретном компоненте


 
Digitman ©   (2005-07-18 17:45) [12]

BlockMode = ?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.039 c
1-1129709558
Sergey_R
2005-10-19 12:12
2005.11.06
Сканирование папок и файлов в потоке


14-1129205025
NailMan
2005-10-13 16:03
2005.11.06
Определение железки по индентификатору


3-1125919576
Monk
2005-09-05 15:26
2005.11.06
Права доступа на базы в BDE


1-1129276525
kull
2005-10-14 11:55
2005.11.06
Можно ли обращаться к ClassName в except...end


2-1129024501
Rolf
2005-10-11 13:55
2005.11.06
Ошибка при создании ComboBox.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский