《C++多线程编程实战》——1.2 创建C++项目

简介:

本节书摘来自异步社区出版社《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中运行没有问题。

相关文章
|
1月前
|
JavaScript 编译器 API
【C++ 函数和过程 进阶篇】全面掌握C++函数返回值:从入门到精通的实战指南
【C++ 函数和过程 进阶篇】全面掌握C++函数返回值:从入门到精通的实战指南
70 1
|
1月前
|
开发工具 C语言 C++
CMake构建大型C/C++项目:跨平台设计与高级应用(二)
CMake构建大型C/C++项目:跨平台设计与高级应用
42 0
|
1月前
|
安全 算法 编译器
【C++ 泛型编程 入门篇】 C++ 模板元编程之枚举内嵌 实战教程
【C++ 泛型编程 入门篇】 C++ 模板元编程之枚举内嵌 实战教程
54 0
|
12天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
32 6
|
1月前
|
存储 前端开发 算法
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析(一)
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析
44 0
|
29天前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
67 0
|
1月前
|
存储 并行计算 Java
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析(二)
C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析
64 0
|
21天前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
8 0
|
27天前
|
Linux API C++
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
51 2
|
28天前
|
IDE 算法 编译器
快速掌握陌生C++项目的科学与心理学策略
快速掌握陌生C++项目的科学与心理学策略
57 0