Может ли DllMain создавать потоки?

Тема в разделе "WASM.BEGINNERS", создана пользователем Quark, 12 янв 2008.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Может ли DllMain создавать потоки? Я написал код:

    Код (Text):
    1. unsigned long __stdcall func1(void *p)
    2. {
    3. __asm int 3;
    4. }
    5.  
    6. DllMain()
    7. {
    8. CreateThread(0,0,func1,0,0,0);
    9. Sleep(100);
    10. }
    бряк не срабатывает, хотя CreateThread выполняется удачно.
     
  2. xh4ck

    xh4ck New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2005
    Сообщения:
    60
    Адрес:
    Russia
    DisableThreadLibraryCalls сделай, дэдлок у тебя происходит. И не в коем случае не вызывай из дллмаин Wait*, Sleep* функции (см. рихтера, почему это так)
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Вообще в дллмейн аккуратно надо делать все. Если это длл к твоей проге, лучше для этого выделить отдельную инициализирующую функцию - не зря в плагинах такие делают.
     
  4. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Я немного неправильно написал пример. В ДллМайн есть ещё проверка.

    Код (Text):
    1. int __stdcall DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
    2. {  
    3.     if (fdwReason == DLL_PROCESS_ATTACH)
    4.     {
    5.         CreateThread(0,0,SomeFunction,0,0,0);
    6.         return 1;
    7.     }
    8.  
    9.     else return 0;
    10. }
    Всё-раво я не совсем понимаю в чём здесь проблемма.

    DLL_PROCESS_ATTACH вызывается только один раз. При этом создаётся новый поток. Сообщение DLL_THREAD_ATTACH встаёт в очередь моей библиотеки. После завершения DllMain и затем LoadLibrary поток ведь должен запуститься. почему этого не происходит? почему поток не разблокируется?
    функция DisableThreadLibraryCalls только лишь запрещает посылку сообщений DLL_THRAED_ATTACH и DLL_THREAD_DETACH, но как она влияет на блокировку потоков?
     
  5. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto