(●’◡’●) 呀!你来啦!!
因为笔者是在Linux环境开发的,所以在Windows上不支持,于是百度到了一个可在Vusual Studio开发的👇
点点这里下载哦
如果下载慢或被 ** 墙了,请你打开迅雷
ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip(这是FTP地址)
你可能遇到问题(如果你遇到的问题为TRUE,方便在这里解决,免去度娘怂索):
如果你遇到C2011 “timespec”:“struct”类型重定义
你需要转到定义去把timespec
结构体注释掉,因为这个头文件已经包含了"time.h
",然而time.h
已经定义了这个结构。
如果你遇到这个头文件的函数error LNK2019: 无法解析的外部符号 __imp__pthread_create,函数 _main 中引用了该符号
你需要
#pragma comment(lib,"x86/pthreadVC2.lib")
或
#pragma comment(lib,"pthreadVC2.lib")
或者项目属性->链接器->输入->附加依赖项,添加pthreadVC2.lib
请参阅致富机密
线程是一个多任务形式,就是说它允许让计算机 同时运行 多个的程序。
一般有两种类型的多线程处理:基于进
程、基于线
程
我觉得基于进程
:程序就一个主线程,所有的代码就在这一个线程里每行执行。
原话:基于进程的多线程处理是程序的并发执行。
我觉得基于线程
:一个进程有多个线程,每个线程同时运行。
原话:基于线程的多线程处理是同一程序的片段的并发执行。
我使用的是Ubuntu系统,在此用 POSIX 编写多线程程序
POSIX 全称是 可移植操作系统接口,它可以跨系统哦
不信你康康这里(●’◡’●)点我点我
包含头文件
包含头文件沙子都会哈,不然在目曙这线程哩!
这个头文件名不是thread哈,本文用的pthread.h,要给它加上一个小 (o゚v゚)ノp
#include <pthread.h>
创建线程
创建线程用这个函数👇👇👇
int pthread_create (
pthread_t * thread,
const pthread_attr_t * attr,
void *(PTW32_CDECL * start_routine) (void *),
void *arg);
参数好多啊,才三个,我们来介绍一下这些参数是啥东东吧👇
参数 | 描述 |
---|---|
thread | 它是一个指向线程标识符指针 |
attr | 一个不透明的属性对象,可以被用来设置线程属性 |
start_routine | 线程运行函数起始地址,一旦线程被创建就会执行 |
arg | 运行的参数。它必须通过把引用作为指针强制转换为 void 类型进行传递。 |
它的返回值是int,返回的是线程是否创建成功,如果成功返回0,返回非0表示线程创建失败
如果你不想使用attr参数可以默认传递NULL
如果arg没有传递参数,也可以使用NULL
终止线程
pthread_exit (void *value_ptr);
上面的那个pthread_exit
这个函数,它主要用于终止某一个线程
例子
#include <iostream>
#include <pthread.h>
using namespace std;
#define THREAD_NUM 5
//线程运行调用
void* test(void* args)
{
cout << "Hello Runoob!" << endl;
return 0;
}
int main()
{
pthread_t *t[THREAD_NUM];
for (int i = 0; i < THREAD_NUM; ++i)
{
int retVal = pthread_create(t[i], NULL, test, NULL);
if (retVal != 0)
{
cout << "create_err --- code_"<< retVal << " ThreadIndex_" << i << endl;
}
}
pthread_exit(NULL);
}