pthread 学习笔记
2014-04-10 18:34
393 查看
windows和Linux的pthread用法稍有不同。
windows:
之后会在安装目录看到有三个文件夹Pre-built.2、pthreads.2、QueueUserAPCEx.
第一个是生成库(头文件和库文件那些),第二个是源码,第三个不清楚,像是测试程序。
将Pre-built.2文件夹下的include和lib文件夹里的文件复制到VS2008对应的include和lib目录,我这里是C:\Program Files\Microsoft Visual Studio 9.0\VC\include和C:\Program Files\Microsoft VisualStudio 9.0\VC\lib.
程序中加入#include<pthread.h>和#pragma comment(lib, "pthreadVC2.lib") //必须加上
这样还是会出现丢失pthreadVC2.dll,把这个dll复制到和程序exe一个文件夹中。
1、pthread_create的最后一个参数可以给函数PrintHello传参。
2、NUM_THREADS和OpenMP的num_threads设置时不一样的,想要8个线程运行程序,NUM_THREADS要设成7。这7个线程是主线程以外的线程运行。
Linux:
上面程序可以照搬,不过不需要加上#pragma comment(lib, "pthreadVC2.lib") ,编译的时候用g++ -o test test.cc -lpthread编译。
过程中出现一个问题是cast from ‘void*’ to ‘int’ loses precision,因为
电脑是64位的,指针长度是8字节,而int 型只有4字节,所以出错,64位机器上安装的VS没这个问题,大概是默认VS是32位的。
64位机器上long是8字节的,因此需要改为long型。
虽然还会有warning但不碍事了。
windows:
1.下载pthreads-w32-2-8-0-release.exe
下载地址:ftp://sourceware.org/pub/pthreads-win322. 安装pthreads-w32-2-8-0-release.exe
双击pthreads-w32-2-8-0-release.exe,点击Browse选择安装到的目录,然后点击Extract解压,完成后点击Done。之后会在安装目录看到有三个文件夹Pre-built.2、pthreads.2、QueueUserAPCEx.
第一个是生成库(头文件和库文件那些),第二个是源码,第三个不清楚,像是测试程序。
将Pre-built.2文件夹下的include和lib文件夹里的文件复制到VS2008对应的include和lib目录,我这里是C:\Program Files\Microsoft Visual Studio 9.0\VC\include和C:\Program Files\Microsoft VisualStudio 9.0\VC\lib.
程序中加入#include<pthread.h>和#pragma comment(lib, "pthreadVC2.lib") //必须加上
这样还是会出现丢失pthreadVC2.dll,把这个dll复制到和程序exe一个文件夹中。
#include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { int tid; tid = (int)threadid; printf("Hello World! It's me, thread #%d!\n", tid); pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc, t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %d\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc){ printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } } pthread_exit(NULL); }这里需要注意的是
1、pthread_create的最后一个参数可以给函数PrintHello传参。
2、NUM_THREADS和OpenMP的num_threads设置时不一样的,想要8个线程运行程序,NUM_THREADS要设成7。这7个线程是主线程以外的线程运行。
Linux:
上面程序可以照搬,不过不需要加上#pragma comment(lib, "pthreadVC2.lib") ,编译的时候用g++ -o test test.cc -lpthread编译。
过程中出现一个问题是cast from ‘void*’ to ‘int’ loses precision,因为
int tid; tid = (int)threadid;
电脑是64位的,指针长度是8字节,而int 型只有4字节,所以出错,64位机器上安装的VS没这个问题,大概是默认VS是32位的。
64位机器上long是8字节的,因此需要改为long型。
虽然还会有warning但不碍事了。
相关文章推荐
- RDS Migration from 5.5 to 5.6 with mysqldump
- Unity3d赋予角色生命动画状态机动画状态 (Animation State)
- 用UltraEidt修改dmp文件把内容导到指定的表空间
- m2eclipse issues ArtifactTransferException
- 无限极分类php
- Socket通信总结(附C++实现)
- 动态内存分配
- iOS 获取手机所有app信息
- 笔试题
- XAMPP的错误Error: Apache shutdown unexpectedly.
- XAMPP的错误Error: Apache shutdown unexpectedly.
- 序列化与对象克隆
- 编写的windows程序,崩溃时产生crash dump文件的办法
- Android中监听EditText文本输入
- Mysql-存储过程和存储函数笔记
- Java中的变量
- 线程池
- 爽翻了?360安全浏览器7.0速度体会!
- 数据结构--基本概念
- 进度条样式