C++多线程学习篇(1)之配置篇

        在以前学习多线程的过程中,遇到了无法添加包含pthread.h头文件的情况。本文主要简单总结一下这种问题的解决方法。我的编译环境是vs2010。

1. 下载文件

首先,从链接ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-8-0-release.exe下载pthreads-w32-2-8-0-release.exe文件,下载完成后双击运行,出现如下界面

依次点击Browse选择目标路径(即释放路径,此路径无关紧要,桌面也可),然后点击Extract提取文件,之后就在设置的目标路径下得到了如下三个文件夹:

2. 然后打开Pre-built.2文件夹,将这个文件夹中include中的文件复制到vs2010安装目录中vc/include目录下,将lib中的文件复制到vc/lib目录下。如果此时不做其他修改,可能还会提示错误 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

解决方法有两种:

方法一:

是嵌入清单的问题,于是对该工程以及所有依赖工程进行如下操作
右键->工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]

1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
1>CVTRES : fatal error CVT1100: 资源重复。类型: MANIFEST,名称: 1,语言: 0x0409

这个是由于日志文件引起的,可以将

项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”。

或者将

项目\属性\配置属性\链接器\清单文件\生成清单:原来是“是”,改成“否”。

方法二(这个方法成功率比较高):

复制 C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7601.17514_none_ba1c770af0b2031b 目录下的 cvtres.exe 到C:\Program Files\Microsoft Visual Studio 10.0\VC\bin 目录下,直接覆盖替换。

3. 在解决了这个问题之后,需要在main.app中加入以下两行代码以防止其他问题:

#pragma warning(disable:4716)
#pragma comment(lib, "pthreadVC2.lib")

为了防止出现下图所示的问题,需要将Pre-built.2文件夹中lib目录下的文件复制到工程目录下,如下所示(里面有一些非必要文件):

4. 到此,所有的常见问题得到基本解决,以下面代码为例跑一段例程序:

#include <iostream>  
#include <pthread.h> //多线程相关操作头文件,可移植众多平台  
#pragma warning(disable:4716)
 
 
using namespace std;
 
#define NUM_THREADS 5 //线程数  
 
void* say_hello(void* args)
{
	cout << "hello..." << endl;
} //函数返回的是函数指针,便于后面作为参数  
 
int main()
{
	pthread_t tids[NUM_THREADS]; //线程id  
	for (int i = 0; i < NUM_THREADS; ++i)
	{
		int ret = pthread_create(&tids[i], NULL, say_hello, NULL); //参数:创建的线程id,线程参数,线程运行函数的起始地址,运行函数的参数  
		if (ret != 0) //创建线程成功返回0  
		{
			cout << "pthread_create error:error_code=" << ret << endl;
		}
	}
	//pthread_exit(NULL); //等待各个线程退出后,进程才结束,否则进程强制结束,线程处于未终止的状态  
 
 
	system("pause");
	return 0;
 
}

运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值