本节书摘来自异步社区出版社《C++多线程编程实战》一书中的第1章,第1.2节,作者: 【黑山共和国】Milos Ljumovic(米洛斯 留莫维奇),更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.2 创建C++项目
本书所有的程序示例均在Visal Studio IDE中运行。下面,针对Visal Studio介绍如何正确地设置IDE,并指出一些影响多线程应用程序的具体设置。
准备就绪
确定安装并运行了Visual Studio(VS)。
操作步骤
运行Visual Studio,在【开始】界面选择【新建项目】,会弹出一个有多个选项的窗口。在左边【模板】下面,选择【C++】,展开C++节点,有【CLR】、【常规】、【测试】、【Win32】等选项。然后,执行以下步骤。
1. 选择Win32。在中间栏有两个选项:【Win32控制台应用程序】和【Win32项目】。
目前,我们使用【Win32控制台应用程序】。【Win32项目】用于有图形用户接口(GUI)的应用程序,而不是控制台程序。如果使用控制台,要在项目属性中设置其他选项。
2. 选择【Win32控制台应用程序】,并在窗口下方的【名称】右边为项目命名。我们把第1个Win32控制台应用程序项目命名为TestProject
。在【位置】右边选择储存该项目文件的文件夹。VS将帮你创建一个文件夹,把用户刚才在【位置】输入的文件夹作为将来创建项目的默认文件夹。
现在,读者应该看到Win32应用程序向导窗口。可以直接单击右下方的【完成】,这样VS会自动创建所有需要的文件。或者,选择【下一步】,然后在附加选项中勾选【空项目】。如果这样做,就要自己创建源文件和头文件,VS不会自动生成所需的文件。
3. 如果在上一步骤的Win32应用程序向导窗口中直接选择【完成】,在【解决方案资源管理器】中就可以看到stdafx.h和targetver.h
头文件,以及stdafx.cpp和TestProject.cpp
源文件。stdafx.h和stdafx.cpp
文件是预处理头文件的一部分,用于智能感应引擎。该引擎使用翻译单元(Translation Unit,TU)模型模仿命令行编译器,用于智能感应。典型的翻译单元由一个源文件和包含在源文件中的多个头文件组成。当然,其中还引用了其他头文件,所以也包含这些被引用的头文件。智能感应引擎从一个特殊的子串开始,给用户提供信息(如,特定类型是什么、函数和重载函数的原型是什么、在当前作用域中变量是否可用等)。欲了解更多相关内容,请查阅MSDN参考资料(http://msdn.microsoft.com )。
4. TestProject.cpp
文件出现在中间的窗口,这就是编写代码的地方。以后,我们会在更复杂的项目中创建和使用更多的文件,现在先暂时介绍这么多。
示例分析
每个程序都必须有自己的主例程,即main
。当运行程序时,操作系统从调用main
开始。这是执行C++程序的起点。如果编写的代码遵循Unicode
编程模型,就可以使用main的宽字符版本wmain
。当然,也可以使用定义在TCHAR.h
中的_tmain
。如果定义了_UNICODE,_tmain
函数相当于wmain
函数;如果没有定义_UNICODE,_tmain
函数相当于main函数。
在TestProject
窗口上方,有各种各样的按钮和选项。其中有一个包含Win32可选项的下拉菜单,这个选项叫做【解决方案平台】。如果要创建32位可执行文件,就不用改动。如果要创建64位可执行文件,先展开下拉菜单,选择【配置管理器】,找到【活动解决方案平台】,选择【x64】选项。点击【确定】,然后关闭【配置管理器】窗口。
在创建64位可执行文件时,最重要的是更改项目属性中的设置。按下Alt+F7,或者右键单击【解决方案资源管理器】中的TestProject
项目,选择【属性】,弹出TestProject
属性页窗口。在【配置属性】的【C/C++】的下拉菜单中选择【预处理器】。在【预处理器定义】中,把WIN32改成_WIN64才能创建64位可执行文件。其他设置暂不更改。
无论创建32位还是64位的代码,都要正确设置代码生成。创建C++项目时,可以选择该应用程序是否依赖用户PC上C++运行时所需的动态链接库(DLL)。如果创建的应用程序不仅在本机上运行,还要在其他PC上运行,就要考虑这一点。用VS在本机开发应用程序,所需的C++运行时库已经安装,不会有任何问题。但是,在其他未安装C++运行时库的PC上运行这种应用程序,就有可能出问题。如果确认不依赖DLL,则需把【运行时库】选项改为【多线程调试(/MTd)】的调试模式,或改为【多线程(/MT)】发布模式。调试模式或发布模式在【解决方案配置】的下拉菜单中可任意切换。
对于本书的程序示例,其他选项都不需要改动,因为32位和64位的机器都能运行32位可执行文件。运行时库作为C++软件包框架已经安装在PC中了,使用默认设置即可,应用程序在这样的PC中运行没有问题。