文档章节

关于linux的pthread库的使用,我的第一个c/c++线程

DannyCoder
 DannyCoder
发布于 2018/09/04 23:52
字数 863
阅读 454
收藏 3

今天折腾了比较久,百度了很多文章,因为是在windows下的导入pthread库,折腾了蛮久的,主要是卡在对动态库dll文件和lib、头文件认识之中。估计像新手一枚的我可能才遇到一些这样的坑。

首先,我们先下载它的库。

pthreads-w32 下载地址

我们这里下载最新版本pthreads-w32-2-9-1

 ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip

 下载后解压,可以看到共有三个文件夹

        

        我们用到的主要是“Pre-built.2”这个文件夹下的三个文件夹,分别是动态链接库、头文件、静态链接库

          

这儿网上找过好几种方式,1种是将相关的lib、头文件直接copy到我们visual studio中去, 2是直接在工程中去设置lib目录和依赖。不过前提是我们windows本来没有pthread的动态库dll文件,这时候需要我们将dll文件下的x86和x64对应的dll复制到对应,顾名思义,x86是32位cpu架构,x64是64位架构,而我这儿需要x86对应的是放到c:\windows\syswin64文件中去,x64对应的dll放到system32文件中去,这儿由于自己新手,没理解为什么感觉没对应上,system32不是对应32位么,希望以后可以理解,自己系统和cpu也是64位的,反正只能这样,这儿坑了下,搞了好久,这样放搞定。

我是使用2的方式,直接附代码:

#include <iostream>
#include <pthread.h>
using namespace std;
#pragma comment(lib, "pthreadVC2.lib")//这儿是直接引用的工程里面的pthread相关lib,我这儿用的是x64的,这儿可能要注意,我创建

                                                               //工程默认是32位的,需要自己去手动调下,反过来应该使用x86的lib应该直接也就ok

void * thread(void * a)
{    
    cout << "a==" << *((int*)a) << endl;
    for (int i = 0; i < 30; i++)
    {
        printf("线程执行第 %d 次\n", i + 1);
    }
    return NULL;
}

 

void main()
{
    pthread_t id;
    int value = 100;
    int ret = pthread_create(&id, NULL, thread, &value);//创建线程,id相当于唯一标识线程,个人理解,thread指向了上面函数代码地址,                                                                                        //线程的执行方法体,传了一个值用来做实验下。
    if (ret != 0)
    {
        cout << "线程创建错误!" << endl;
        exit(-1);
    }
    for (int i = 0; i < 30; i++)
    {
        printf("main函数执行第 %d 次\n", i + 1);
    }
    pthread_join(id, NULL); //


    system("pause");//因为没有使用控制台,所以用系统函数使得窗口暂停
}

附设置项目工程对应的cpu可以支持的,我这儿只做了x64的

设置相应的工程平台我这儿选的x64,用的lib也是对应的x64的lib

把头文件引入进来

这儿选择平台的问题算属于个坑,需要对号入座。这样就基本大功告成。

人生的第一个c语言线程创建成功了!方式应该还是可以选择1的方式如果作为通用库的话,以后使用也方便。后面有时间继续摸索

 

© 著作权归作者所有

DannyCoder
粉丝 3
博文 69
码字总数 36859
作品 0
广州
程序员
私信 提问
unix环境高级编程-undefined reference to 'pthread_create'

笔者一直在学习unix环境高级编程。第十一章为线程编程。第一个程序就是打印线程ID。程序如下: [cpp] view plaincopy #include "apue.h" #include <pthread.h> pthread_t ntid; void printids......

天外飞鱼
2013/12/30
212
0
VS2017开发Linux平台上的程序

重装系统后安装VS2015时卡住了,于是试试看VS2017怎样,听说还支持调Linux。发现VS2017跟12/13/15又有了新的飞跃,竟然支持模块化下载,对于我这种主要写C++简直是个福音,勾了Linux C++和M...

simpower
2018/08/11
60
0
mingw无法编译多线程程序的问题及解决

在linux环境下,用gedit+gcc方式学习一段时间的c语言,发现自己越来越佩服linux的牛人了。 居然不用IDE也能开发代码。我做不到,所以有回到了windows的怀抱。 mingw是windows版本的gnu c/c++...

mfcai
2013/03/04
625
2
acl -- 网络及服务器编程框架库 3.0.15 版本发布

acl 3.0.15 版本 (项目主页:https://sourceforge.net/projects/acl/,技术文章主页:http://zsxxsz.iteye.com/)) 发布了,acl 是 one Advanced C/C++ library 的简称,主要包括网络通信库以...

郑树新
2014/01/25
1K
2
网络与服务器编程框架库 acl_3.0.13 发布

acl 3.0.13 版本 (项目主页:https://sourceforge.net/projects/acl/) 发布了,acl 是 one Advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows ...

郑树新
2013/11/04
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

浅谈Visitor访问者模式

一、前言 什么叫访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+对其进行处理就叫作访问,那么...

青衣霓裳
31分钟前
6
0
JS内嵌多个页面,页面之间如何更快捷的查找相关联的页面

假设parent为P页面, P页面有两个子页面,分别为B页面和C页面; B页面和C页面分别内嵌一个iframe,分别为:D页面和E页面 现在通过B页面的内嵌页面D的方法refreshEpage(eUrl)来加载内嵌页面E的内容...

文文1
32分钟前
7
0
Hibernate 5 升级后 getProperties 错误

升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; 完整的错误栈为: java.lang.NoSuchMethodError: org.hibernate......

honeymoose
33分钟前
6
0
mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
37分钟前
7
0
Spring中BeanFactory与FactoryBean的区别

在Spring中有BeanFactory和FactoryBean这2个接口,从名字来看很相似,比较容易搞混。 一、BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定...

大王叫下
39分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部