字体
第(4/4)页
关灯
   存书签 书架管理 返回目录
代码将显式调用ExitProcess()函数,终止进程的运行。

    如果因为进程中的线程调用FreeLibrary()或FreeLibraryAndExitThread()函数而将DLL 卸

    载,那么调用函数的线程将负责执行DllMain()函数的代码。如果使用FreeLibrary,那么要等

    到DllMain()函数完成对DLL_PROCESS_DETACH 通知的执行后,该线程才可以从对

    FreeLibrary 函数的调用中返回。

    3.DLL_THREAD_ATTACH 通知

    当在一个进程中创建线程时,系统查看当前映shè到该进程的地址空间中的所有DLL 文件

    映像,并调用每个带有DLL_THREAD_ATTACH 值的DllMain()函数文件映像。这样,DLL

    就可以执行每个线程的初始化cāo作。新创建的线程负责执行DLL 的所有DllMain()函数中的

    代码。只有当所有的DLL 都有机会处理该通知时,系统才允许新线程开始执行它的线程函数。

    当一个新DLL 被映shè到进程的地址空间时,如果该进程内已经有若干个线程正在运行,

    那么系统将不为现有的线程调用带有DLL_THREAD_ATTACH 值的DDL 的DllMain()函数。

    只有当新线程创建时, DLL 被映shè到进程的地址空间中, 它才可以调用带有

    DLL_THREAD_ATTACH 值的DLL 的DllMain()函数。

    另外要注意,系统并不为进程的主线程调用带有DLL_THREAD_ATTACH 值的任何DllMain()

    函数。进程初次启动时映shè到进程的地址空间中的任何DLL 均接收DLL_PROCESS_ATTACH 通

    知,而不是DLL_THREAD_ATTACH 通知。

    4.DLL_THREAD_DETACH 通知

    让线程终止运行的首选方法是使它的线程函数返回。这使得系统可以调用ExitThread()

    函数来撤消该线程。如果ExitThread()函数要终止运行该线程,系统不会立即将它撤消,而是

    取出这个即将被撤消的线程, 并让它调用已经映shè的DLL 中所有带有

    DLL_THREAD_DETACH 值的DllMain()函数。这个通知告诉所有的DLL 执行每个线程的清

    除cāo作。例如,DLL 版

    松语文学免费小说阅读_www.16sy.com
上一页 目录 下一章