VS2017 DLL中调用_beginthreadex创建线程

在_beginthreadex函数内部会调用GetModuleHandleExW增加DLL的引用计数,确保线程退出前DLL不会从进程中卸载。

    // Attempt to bump the reference count of the module in which the user's
    // thread procedure is defined, to ensure that the module will stay loaded
    // as long as the thread is executing.  We will release this HMDOULE when
    // the thread procedure returns or _endthreadex is called.
    GetModuleHandleExW(
        GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
        reinterpret_cast<LPCWSTR>(procedure),
        &parameter.get()->_module_handle);
 

线程结束时,在_endthreadex执行如下代码减少DLL引用计数。

    if (parameter->_module_handle != INVALID_HANDLE_VALUE && parameter->_module_handle != nullptr)
    {
        FreeLibraryAndExitThread(parameter->_module_handle, return_code);
    }
    else
    {
        ExitThread(return_code);
    }

上一篇:WebDriver对象的一些方法&界面冻住


下一篇:35. Django 2.1.7 类视图