线程 C 库:LIBCMT.LIB 和 MSVCRT.LIB
支持库 LIBCMT.LIB 是可重入库,用于创建多线程程序。调用共享的 MSVCRT70.DLL 中代码的 MSVCRT.LIB 库也是可重入库。当应用程序调用这些库中的函数时,可以应用下列规则:
所有库调用必须使用 C (__cdecl) 调用约定;使用其他调用约定(如 __fastcall 或 __stdcall)编译的程序必须使用它们调用的运行时库函数的标准包含文件。
传递到库函数的变量必须由值传递或转换为指针。
使用 LIBCMT.LIB 生成的程序不与它们所调用的任何动态链接库共享 C 运行时库代码或数据。
LIBCMT.LIB 和 MSVCRT.LIB 以外的其他选择
如果不使用 LIBCMT.LIB 来生成多线程程序,必须执行下列操作:
使用标准 C 库并且只允许可重入函数集进行库调用。
使用 Win32 API 线程管理函数,如 CreateThread。
通过使用 Win32 服务(如信号灯和 EnterCriticalSection 和 LeaveCriticalSection 函数),为不可重入的函数提供自己的同步。
警告 多线程库 LIBCMT.LIB 包括 _beginthread 和 _endthread
函数。_beginthread 函数执行初始化,若没有该函数,许多 C 运行时函数将失败。如果要调用 C
运行时函数,必须使用 C 程序中用 LIBCMT.LIB 生成的 _beginthread,而不是
CreateThread。
多线程库编译选项
若要生成使用 C 运行时库的多线程应用程序,必须通知编译器使用特殊版本的库 (LIBCMT.LIB)。若要选择这些库,请首先打开项目的属性页对话框(“视图”菜单)并单击 C/C++ 文件夹。选择“代码生成”页。从“运行时库”下拉框中选择“多线程”。单击“确定”按钮以返回编辑状态。
命令行中的多线程库编译器选项 (/MT) 是用 LIBCMT.LIB 生成多线程程序的最佳途径。在创建新项目的过程中指定多线程应用程序时,自动设置此选项,此选项将 LIBCMT 库名嵌入对象文件中。
阅读(1312) | 评论(0) | 转发(0) |