|
|
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
хто-нить может разжевать такую ситуацию: Имеется приложение которое порождает множество дочерних потоков ... приложение закрывают, оно (СWinApp) рассылает порожденным потокам сообщение WM_QUIT(те закрывает их) ... в порожденных потоках запускается процесс деинсталяции каждый из которых может отнимать заметно большее время чем тербуемое для рассылки приложением уведолмлений дочерним потокам о завершении работы ... те оно разослало и продолжает свой СWinApp::ExitInstance() ... сейчас я создаю event на ожидание в основном потоке посылаю дочернему уведомление и приостанавливаю основной поток пока дочерний не скинет этот event и так в цикле по всем дочерним потокам ... может все эти заморочки с объектами ядра - лишние? те меня интересует вопрос нормально (до конца) ли завершатся дочерние потоки если основной уже будет убит системой в то время пока они (часть из них) еще работают (не завершены) ? ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 08:39 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
NSFuimusхто-нить может разжевать такую ситуацию: Имеется приложение которое порождает множество дочерних потоков ... приложение закрывают, оно (СWinApp) рассылает порожденным потокам сообщение WM_QUIT(те закрывает их) ... в порожденных потоках запускается процесс деинсталяции каждый из которых может отнимать заметно большее время чем тербуемое для рассылки приложением уведолмлений дочерним потокам о завершении работы ... те оно разослало и продолжает свой СWinApp::ExitInstance() ... сейчас я создаю event на ожидание в основном потоке посылаю дочернему уведомление и приостанавливаю основной поток пока дочерний не скинет этот event и так в цикле по всем дочерним потокам ... может все эти заморочки с объектами ядра - лишние? те меня интересует вопрос нормально (до конца) ли завершатся дочерние потоки если основной уже будет убит системой в то время пока они (часть из них) еще работают (не завершены) ? ... не нормально, возможны утечки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 08:46 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
Вообще единственным нормальным завершением потока считается самостоятельное достижение потоком точки выхода из него - return x. Другой вопрос как этого добиться, но я бы посоветовал контролировать хендлы потоков и по ним проверять активность потока при выходе из приложения. Для этого можно сделать класс-контейнер для хранения всех описателей ну и т.д. -------------------------------------------------------------- Don't worry - wear Huggies ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 08:49 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
дык контейнер есть ... как еще проще я могу узнать какие потоки запущены? не... с этим все ясно ... ладна ... оставим старый код как есть ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 08:57 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
хе ... врубился ... те ты предлагаешь делать ожидание не только на событие но и на хэндл потока? типа Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 09:05 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
NSFuimusхе ... врубился ... те ты предлагаешь делать ожидание не только на событие но и на хэндл потока? типа Код: plaintext 1. 2. 3. 4. через хендл ты можешь узнать состояние потока Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 09:23 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
хм ... а Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 09:30 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
NSFuimusхм ... а Код: plaintext 1. можно и так, но если поток задержиться надолго эта функция заблокирует интерфейсный поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 09:32 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
ладна ... спасибо ... натолкнул на дельную мысль ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 09:34 |
|
||
|
Основной поток и порожденные, MFC
|
|||
|---|---|---|---|
|
#18+
NSFuimusхто-нить может разжевать такую ситуацию: Имеется приложение которое порождает множество дочерних потоков ... приложение закрывают, оно (СWinApp) рассылает порожденным потокам сообщение WM_QUIT(те закрывает их) ... в порожденных потоках запускается процесс деинсталяции каждый из которых может отнимать заметно большее время чем тербуемое для рассылки приложением уведолмлений дочерним потокам о завершении работы ... те оно разослало и продолжает свой СWinApp::ExitInstance() ... сейчас я создаю event на ожидание в основном потоке посылаю дочернему уведомление и приостанавливаю основной поток пока дочерний не скинет этот event и так в цикле по всем дочерним потокам ... может все эти заморочки с объектами ядра - лишние? те меня интересует вопрос нормально (до конца) ли завершатся дочерние потоки если основной уже будет убит системой в то время пока они (часть из них) еще работают (не завершены) ? ... Вы делаете логически всё правильно. Единственное предложение, как тут уже прозвучало - после выставления окончания работы (не обязательно объект ядра) подождать на массиве хэндлеров всех Ваших потоков скопом (пример грамотного юзанья - Рихтер "Windows для профессионалов"). Всё без проблем работает в "боевых системах". Минусы которые хотелось бы отметить сразу (точнее не то что бы именно этого подхода, и я бы сказал - подводные камни) - это потоки ожидание на приёме пакетов. Либо он имеет квант ожидания (через которые он просматривает флаг), либо слать такому потоку пустой, сигнальный пакетик - дабы запустить логику... удачи Вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 16:02 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=348&tid=2031002]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
18ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 295ms |

| 0 / 0 |
