Re[5]: блокировка трэда
От: McQwerty Россия  
Дата: 25.02.05 17:29
Оценка:
Здравствуйте, Delphi, Вы писали:

D>Здравствуйте, Odi$$ey, Вы писали:


OE>>Здравствуйте, <Аноним>, Вы писали:


А>>>Нет, так не пойдет

А>>>Нужно чтобы это был дочерний процесс
OE>>AfxBeginThread не запускает дочерних процессов
А>>>и не вешал parent...дожидаться нужно без затрат процессорного времени(может WaitForSingleObject ?).
OE>>WaitForSingleObject точно также "повешает parent", процессор будет загружен аналогично
А>>>Если просто запцускать как указано выше, то это будет вешать прогу до момента завершения функции.
D>Наверное неправильно вопрос сформулировал, сейчас объясню ситуацию.

D>У нас есть какой то гуи утыканные кнопочками, эдитами и т.д., так вот при нажатии на кнопку должен произойти коннект куда-то, что и делает(Our_Func), естественно это подвешивает наш гуи, до тех пор пока не будет получен ответ от сервера, к которому мы коннектились, и невыполнены все операции(вобщем пока не завершится ф-ция). Чтобы наш гуи не вешался разумно использовать трэды, в этом случаи наш гуи не вешается, и там можно нажимать и вводить чего хочешь. Но в таком случае можно(и нужно) нажать на заветную кнопочку, которая запускает соответственно Our_Func, и с уже имеющимся трэдом создастся еще один, при следующем нажатии еще и т.д. Разумеется нам ненадо делать 300 коннектингов к серверу, и мы создаем очередь, а так как количество клиентов в этой очереди неизвестно это будет список(односвязный или двусвязный — смотря для чего). вот мы и исполняем наш


D>P.S. При первом нажатии на кнопочку мы добавляем элемент в очередь и запускаем наш цикл, а при последующих нажатиях идет только добавление в очередь.


D>Надеюсь теперь я лучше раскрыл проблему


Я бы сделал так: при старте программы сразу создал-бы поток.
Сбоку присобачил-бы очередь запросов. И событие, что очередь поменялась.

Порождённый поток ожидает события, просыпается, извлекает из очереди
первый запрос, обрабатывает, если очередь пуста — опять спит.

ГУЙ-поток при нажатии кнопки формирует запрос, помещает его в очередь,
поднимает событие и работает дальше.

При завершении работы ГУЙ-потока ставим в очредь спец-запрос: "кончай".
По этому запросу дополнительный поток завершается.

Очередь запросов, конечно, нужно делать потоко-безопасной. Но это мелочи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.