博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows下使用pthread库(GCC CL编译器都可以使用)
阅读量:7027 次
发布时间:2019-06-28

本文共 3430 字,大约阅读时间需要 11 分钟。

只有还没做出来的,没有想不到的。

从linux移植到windows的C++程序,肯定要改造下 socket和线程库。

某日,突然想到 windows 可以使用pthread库么?搜索,果然有线程的解决方案。

1.下载:

直接下载最新的就行,目前是:   因为是windows平台的,所以下载 .zip 或。exe就行,.exe 就是自解压而已,别无其他。最新版本 没有.exe的下载版本了,其内容和zip的一样。但是 zip和 tar.gz tar.bz2的 不太一样。zip比较全,包括了 已经编译好的二进制Pre-built.2,源码pthreads.2,还有一个3.QueueUserAPCEx 不知道到底干什么用的,是一个alert的driver,编译 需要 DDK ,默认vs2010 没有安装。Windows Device Driver Kit NTDDK.h 需要额外单独安装。

2.安装这些开发库到你的环境中,包括 lib 到vs的lib文件夹,dll到path目录中,include到vs的include文件夹中。这样比较方便么。

写两个个脚本 容易实现的:

rem put this file to :D:\#win pthread\pthreads-w32-2-9-1-release\Pre-built.2copy include\pthread.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"pthread.hcopy include\sched.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"sched.hcopy include\semaphore.h "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"semaphore.hcopy dll\x86\pthreadVC2.dll %windir%\pthreadVC2.dllcopy dll\x86\pthreadVCE2.dll %windir%\pthreadVCE2.dllcopy dll\x86\pthreadVSE2.dll %windir%\pthreadVSE2.dllcopy lib\x86\pthreadVC2.lib "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVC2.lib copy lib\x86\pthreadVCE2.lib "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVCE2.lib copy lib\x86\pthreadVSE2.lib "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVSE2.lib ping -n 2 127.1>nul
rem put this file to :D:\#win pthread\pthreads-w32-2-9-1-release\Pre-built.2del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"pthread.hdel /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"sched.hdel /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\"semaphore.hdel /f /a /q  %windir%\pthreadVC2.dlldel /f /a /q  %windir%\pthreadVCE2.dlldel /f /a /q  %windir%\pthreadVSE2.dlldel /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVC2.lib del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVCE2.lib del /f /a /q "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\"pthreadVSE2.lib ping -n 2 127.1>nul

以上 路径 可能不一样,请自行更正。

3.测试 windows下的pthread库

#include
#include
#include
#pragma comment(lib, "pthreadVC2.lib") //必须加上这句 void*Function_t(void* Param){ pthread_t myid = pthread_self(); while(1) { printf("线程ID=%d \n", myid); Sleep(4000); } return NULL;} int main(){ pthread_t pid; pthread_create(&pid, NULL, Function_t,NULL); while (1) { printf("in fatherprocess!\n"); Sleep(2000); } getchar(); return 1;}

这个是直接copy网友的,例子不是特别的好,仅仅使用到了pthread_create.

包括了 windows.h 和pthread.h 头文件。

由于其是使用 DLL 方式链接 pthread库的,所以,dll需要到path路径中去,放到 可执行文件目录也行。至于能否 直接静态链接 到可执行文件,我想 应该 特别容易了,自己编译下 windows pthread库就可以了。

编译 这个 测试文件 我也写个 批处理,以后 直接看到批处理,就什么都明白了。

rem 0.=========初始化 VS环境call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86rem 1.=========rem 源文件中添加 #pragma comment(lib, "pthreadVC2.lib")cl.exe testWPthread.cpp  rem 2.=========rem cl.exe testWPthread.cpp  /c /I"c:\pthreads-w32-2-7-0-release\Pre-built.2\include"rem link.exe testWPthread.obj /LIBPATH:"c:\pthreads-w32-2-7-0-release\Pre-built.2\lib" pthreadVC2.libtestWPThread.exedel /f *.exedel /f *.objcmd

链接 lib库 ,在cl.exe编译器下 可以通过  #pragma comment(lib, "pthreadVC2.lib") 或者 加入 到cl.exe 的参数中去 都可以。

如何编译 windows pthread库,以及 如何更改成 静态链接库,请听下回分解。

 

参考链接:

转载地址:http://lkrxl.baihongyu.com/

你可能感兴趣的文章
Android 用achartengine 画折线图怎么显示不正确
查看>>
程序简单的测试与升级(暨实践第一次作业)
查看>>
信号处理
查看>>
【100题】第五十九题 用C++编写不能被继承的类
查看>>
轻描淡写
查看>>
mysql基本操作
查看>>
39.CSS3弹性伸缩布局【下】
查看>>
[javascript]图解+注释版 Ext.extend()
查看>>
我的前端工具集(七)div背景网格
查看>>
linux 下mongo 基础配置
查看>>
【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(转)...
查看>>
JUnit单元测试中的setUpBeforeClass()、tearDownAfterClass()、setUp()、tearDown()方法小结
查看>>
java之jvm学习笔记六(实践写自己的安全管理器)
查看>>
Docker容器查看ip地址
查看>>
在PC端或移动端应用中接入商业QQ
查看>>
将python3.6软件的py文件打包成exe程序
查看>>
DataTable 排序
查看>>
大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)
查看>>
嵌入式系统在工业控制中的应用
查看>>
使用httpclient异步调用WebAPI接口
查看>>