|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.01.2014, 01:18 | #11 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Так ведь guarded_thread - тоже объект, который будет уничтожаться. У него в деструкторе вызовется join, за счет этого программа и дождется завершения потока.
А в примере с fltk до уничтожения потока могли теоретически уничтожиться какие-то внутренние объекты fltk, без которых окно создаться не может. |
09.01.2014, 09:04 | #12 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 671
|
Думаю это ограничение самой оси, MessageBox тоже не может показаться
Код:
2. Можно ли наделить порожденный поток такими же правами как main поток? |
09.01.2014, 12:07 | #13 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
1. Ничем
2. В смысле? Они ничем не отличаются, права у них одинаковые, если их не менять. В вашем примере MessageBox не показывается, потому что после выхода из main() вызывается ExitProcess(). Это не ограничение OS, это имплементация данного С компилятора. Если не использовать ExitProcess, процесс завершится когда завершатся все его потоки. |
09.01.2014, 12:52 | #14 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 671
|
Все, я понял. Добавил к предыдущему коду еще один cpp модуль и в нем создавался глобальный объект:
Код:
Код:
|
09.01.2014, 13:05 | #15 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
Как только вы выйдете из main() все глобальные объекты будут удалены.
Никто никого не ждет, если только в самих деструкторах нет какой либо синхронизации. |
09.01.2014, 13:23 | #16 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 671
|
Я ведь делал join(). Вообще все работает логично. Просто я сузил взгляд до одного модуля и двух потоков. Ведь модулей может быть много и у них могут быть свои потоки в глобальных объектах. Единственным способом (на мой взгляд) контролировать начало разрушения глобальных объектов - контролировать момент завершения главного потока.
|
09.01.2014, 18:13 | #17 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 671
|
Мы тут немножко коснулись WinApi, у меня небольшой вопрос. Здесь http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx много говорится про ограничения входной точки ДЛЛ, также сказано что эти ограничения распространяются на конструкторы/деструкторы глобальных/статических объектов. У меня к сожалению нечем открыть предлогаемый там файл с примерами, поэтому хотел бы уточнить:
- Безопасно ли вызывать средства из С/C++ std библиотек в конструкторах/деструкторах глобальных объектов длл (динамически линкуемая std библиотека)? |
09.01.2014, 21:14 | #18 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
Распространяются только потому, что создание/удаление объктов делается из DllMain (из С рантайма, а не вашего). std библиотеки обычно вызывать безопасно, но зачем? ГЛобальные объекты - зло (строгое IMHO).
|
09.01.2014, 21:55 | #19 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 671
|
Спасибо за ответы.
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему при перегруженных = и +, вызывается... | WebbMan | Общие вопросы C/C++ | 18 | 13.12.2012 01:15 |
Почему вызывается деструктор? | MrGukk | Общие вопросы C/C++ | 13 | 23.08.2012 17:42 |
Не вызывается деструктор | kineziz | Общие вопросы C/C++ | 4 | 18.08.2012 15:54 |
два раза к одной таблице | Kolik317 | SQL, базы данных | 2 | 26.12.2009 13:58 |
слово пишется два раза | INDY-SAVER | Microsoft Office Word | 2 | 18.11.2009 23:49 |