в програме крутится нить, нужно из неё запустить другую программу (предварительно убив Mutex) и текущий процесс полностью завершить(убить все нити, в общем всё что может остаться). Как это лучше всего сделать ? я запускаю через _execl, мне советуют сделать через CreateProcess() как наиболее корректно поступить в такой ситуации.
вот кусок кода
----------------------------------------
[skip]
А> /* main loop */ А> while(1) А> Sleep(1);
Непонятно — зачем у вас while(1) ?
Здесь долно стоять ожидание например события, а взводить его надо после вызова _execl — если все нормально прошло.
И нормально завершать программу.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
А>> /* main loop */ А>> while(1) А>> Sleep(1);
З>Непонятно — зачем у вас while(1) ?
ну это основной цыкл программы, там на самом деле не Sleep это я для простоты написал, чтоб было всем понятно и покороче.
З>Здесь долно стоять ожидание например события, а взводить его надо после вызова _execl — если все нормально прошло. З>И нормально завершать программу.
Не совсем понял. Можно чуть чуть поподробнее.
Я думал что вызовом _execl() запускается новый процесс и в текущий я никогда не возвращаюсь(он завершается), однако запуск из нити немножко подпортил эту задумку.
[skip]
З>>Здесь долно стоять ожидание например события, а взводить его надо после вызова _execl — если все нормально прошло. З>>И нормально завершать программу. S>Не совсем понял. Можно чуть чуть поподробнее. S>Я думал что вызовом _execl() запускается новый процесс и в текущий я никогда не возвращаюсь(он завершается), однако запуск из нити немножко подпортил эту задумку.
Так я был неправ в том что _execl вернется если вызов успешний.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Здравствуйте, Злость, Вы писали:
З>Здравствуйте, sae2y, Вы писали:
З>[skip]
З>>>Здесь долно стоять ожидание например события, а взводить его надо после вызова _execl — если все нормально прошло. З>>>И нормально завершать программу. S>>Не совсем понял. Можно чуть чуть поподробнее. S>>Я думал что вызовом _execl() запускается новый процесс и в текущий я никогда не возвращаюсь(он завершается), однако запуск из нити немножко подпортил эту задумку.
З>Так я был неправ в том что _execl вернется если вызов успешний.
А вот в том то и дело что такого не происходит, приходится делать вот так
CloseHandle(mutex);
close(mainsock);
_execl(fname_tmp, fname_tmp, 0);
ExitProcess(0);
тоесть процесс почему то не завершается если я делаю _execl внутри нити.
[skip]
З>>Так я был неправ в том что _execl вернется если вызов успешний. S>А вот в том то и дело что такого не происходит, приходится делать вот так S>CloseHandle(mutex); S>close(mainsock); S>_execl(fname_tmp, fname_tmp, 0); S>ExitProcess(0);
S>тоесть процесс почему то не завершается если я делаю _execl внутри нити.
Надо смотреть как M$ реализовла данный функционал — понятное дело все в итоге приходит к CreateProcess, но что они вокруг накрутили, я незнаю.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.