Re[4]: блокировка трэда
От: Delphi  
Дата: 25.02.05 13:23
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

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


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

А>>Нужно чтобы это был дочерний процесс

OE>AfxBeginThread не запускает дочерних процессов


А>>и не вешал parent...дожидаться нужно без затрат процессорного времени(может WaitForSingleObject ?).


OE>WaitForSingleObject точно также "повешает parent", процессор будет загружен аналогично


А>>Если просто запцускать как указано выше, то это будет вешать прогу до момента завершения функции.


Наверное неправильно вопрос сформулировал, сейчас объясню ситуацию.

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

while(<указатель на список> != NULL) {
     thread = AfxBeginThread((AFX_THREADPROC)  Our_Func, 
                pVal, 
                THREAD_PRIORITY_NORMAL, 
                0, 
                0, 
                NULL);
 <указатель> = <сделующему элементу>;

}


Но опять же создастся куча трэдов => куча почти одновременных коннектингов(запусков Our_Func);

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

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

Надеюсь теперь я лучше раскрыл проблему
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.