Вниз
Скачать: CL | DM;

TThread и повторный вызов   Найти похожие ветки 

 
Alec_C   (2005-12-13 09:10) [0]

Я работаю с телнетом. Когда появляются данные, я создаю TThread, который их обрабатывает. Однако если данных много, их обработка может занимать много времени, при этом могут поступить уже новые данные до того момента, как перед этим созданный TThread обработает предыдущие полученные данные и завершится. Чтобы избежать одновременно начала работы следующей созданной нити до того момента, как закончится предыдущая, я делаю так:
в ф-ции работы нити -
// Ждем пока предыдущая нить завершиться
While TelnetForm.Tag = 10 do
    Application.ProcessMessages;
// Ставим флаг, что нить работает
TelnetForm.Tag := 10;
// Обработка данных
........
// Убираем флаг работы нити
TelnetForm.Tag := 0;
Правильно ли это?


 
MBo ©   (2005-12-13 09:15) [1]

обычно не стоит на каждую порцию данных создавать свой потоковый объект.
на мой взгляд, разумно сделать два дополнительных потока - один принимает данные и пишет их в буфер. Второй берет из буфера и обрабатывает, передавая готовые данные в основной поток (с синхронизацией) или в еще один буфер, из которого уже основной поток заберет.


 
TUser ©   (2005-12-13 10:05) [2]

Если обслуживаешь много клиентов, то для каждого отдельный поток - это понятно. А зачем тормозить работу до завершения предыдущего задания? Если каждому свой поток, то обычно они работают параллельно.

> Правильно ли это?

Нет, не правильно. Надо ждать завершения работы поток в WaitForSingleObject, или проще - прописаться в OnTerminate того потока, завершения которого мы ждем.



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.03 c
1-1134127864
kvorubin
2005-12-09 14:31
2006.01.15
Как сравнить 2 разных списка разбитых по линиям


14-1134921404
Praetor
2005-12-18 18:56
2006.01.15
Воскресная задачка


14-1134817329
IAmDanil
2005-12-17 14:02
2006.01.15
Прикол


14-1134772194
Ricks
2005-12-17 01:29
2006.01.15
Графики функций


14-1135176930
l4m3r
2005-12-21 17:55
2006.01.15
Отличие функции от процедуры




   Наверх