Здравствуйте, 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. При первом нажатии на кнопочку мы добавляем элемент в очередь и запускаем наш цикл, а при последующих нажатиях идет только добавление в очередь.
Надеюсь теперь я лучше раскрыл проблему