Создание потока в DllMain?

Это зависит от Вашего языка и среды. Как правило, я не использовал бы его, если из-за среды разработки, в которой Вы находитесь, не сложно находить тип переменной.

существует также два различных типов Венгерской записи. См. статью Joel. Я не могу найти его (его имена точно не делают их легкими найти), у кого-либо есть ссылка на ту, которую я имею в виду?

Редактирование: Клин имеет статью, которую я имею в виду в его сообщении.

10
задан sold 6 November 2009 в 15:22
поделиться

4 ответа

Вам не следует выполнять какие-либо вызовы API, особенно для таких вещей, как создание потоков или окон из DLLMain. Раймонд Чен писал об этом много раз; вот один , который особенно важен.

10
ответ дан 3 December 2019 в 19:33
поделиться

Нет. Вы не должны вызывать CreateThread (или любой другой вариант) из DllMain. Попытка выполнить синхронизацию приведет к тупиковой ситуации. Что именно вы пытаетесь сделать?

Рекомендации по созданию библиотек DLL

4
ответ дан 3 December 2019 в 19:33
поделиться

Вы спрашиваете для неприятностей, если вы это сделаете. Вы не должны делать никаких вызовов (прямо или косвенно) к функциям, которые находятся за пределами вашей dll (включая вызовы библиотеки C и т. Д.).

Если вы не можете изменить имеющуюся у вас DLL (например, у вас нет исходного кода), вы можете избежать этого, если ваша DLL динамически загружается после остальной части вашего инициализируются зависимые DLL. Я бы не рекомендовал этот подход, если вы можете его избежать, потому что выяснение цепочки зависимостей не всегда тривиально (например, если ваша dll заставляет зависимую dll загружать третью динамически через COM или каким-либо другим способом).

0
ответ дан 3 December 2019 в 19:33
поделиться

Существует разница. При использовании представления Синхронизировать (Synchronize) обновляются только предметы в представлении. С помощью Subversion папки также имеют редакцию, которая создается каждый раз при изменении нижестоящего элемента. Однако, поскольку они не отображаются в представлении, они никогда не обновляются. При выполнении команды Команда (Team) > Обновить (Update) в проекте все папки и файлы обновляются до единой версии. У меня есть пара блогов, которые объясняют это:

Это объясняет основную концепцию SVN смешанной рабочей копии редакции и имеет важное значение для понимания этого:

http://markphip.blogspot.com/2006/12/mixed-revision-working-copies.html

Второй показывает функцию в Subclipse для решения этой задачи:

http://markphip.blogspot.com/2006/12/subclipse-synchronize-feature-show-out.html

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

Главное - время от времени использовать Team > Update on your project, чтобы довести все до единой редакции.

Пометить

-121--1621880-

Начните с учебного пособия по Java

http://java.sun.com/docs/books/tutorial/getStarted/index.html

Затем купите Head First Java

http://oreilly.com/catalog/9780596004651

Это позволит вам быстро перейти на язык, который необходим независимо от того, что вы хотите сделать.

-121--1119788-

Что делает ваш поток?

Если вы пытаетесь переместить вещи во второй поток, чтобы избежать ограничений на то, что вы можете сделать внутри Dll Main, трудная удача. Они не являются ограничениями на то, что может сделать Dll Main, они являются ограничениями на то, что можно сделать во время работы Dll Main (и удерживают блокировку загрузчика). Если поток должен взять блокировку загрузчика, он будет ждать, пока первый поток не завершит его использование. Если ваша нить не нуждается в блокировке загрузчика, я не понимаю, почему она не может быть немедленно продолжена... но нет такой вещи, как нить, которая не нуждается в блокировке загрузчика. Перед запуском потока Windows должна отправить DLL_THREAD_ATTACH сообщения во все DLL-библиотеки, а это значит, что он также вызывает собственную Dll Main, и Windows защищает от повторного входа.

Это никак не обойдется. Поток не может быть запущен до тех пор, пока не DLL_THREAD_ATTACH обработка, и это не может произойти, пока первый поток находится в Dll Main. Единственный способ обойти это - начать новый процесс (который имеет независимую блокировку загрузчика и не будет блокировать ожидание вашего).

6
ответ дан 3 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: