pthread+Windows环境搭建

article/2025/9/18 18:33:24

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 为什么会要用到pthread库?
  • 一、pthread库下载
  • 二、使用步骤
    • 1.创建VS工程
    • 2.设置环境变量
      • 2.1动态载入
      • 2.2静态载入
  • 三、结语


为什么会要用到pthread库?

  pthread库是Linux的多线程库,通常在Windows下使用该库大多数是为了实现与Linux的跨平台兼容。
  如果你为了在Windows环境下实现多线程,可以考虑Windows自带的多线程API。
  当然你也可以使用宏定义的方式,区分windows与Linux环境在执行对应的多线程接口,实现跨平台运行,毕竟条条大路通罗马。
  以上只为发散思维,下面进入正题


一、pthread库下载

  如果你已经有了该库,那么该资源可以不用下载。

链接:https://pan.baidu.com/s/11_AZhBdpATCCMKYgaSsVGQ
提取码:tsaw
PS:讨厌那些动不动就把资源丢到CSDN上骗积分的人!这让没有积分的人怎么下载?

二、使用步骤

演示环境 Win10 + VS2015

1.创建VS工程

点击文件->新建->项目->选择Win32项目->确定,选择控制台应用程序->勾选空项目,完成创建。   右键源文件->添加->新建项,创建一个.cpp文件,取名为main.cpp

在这里插入图片描述

这只是创建一个演示工程,如果你已经有一个项目了,这个步骤可以跳过。

2.设置环境变量

将解压后的pthread文件夹丢到工程目录下
在这里插入图片描述
接下来将通过动态载入静态载入两种方式讲解如何配置pthread库环境,请根据项目需要任选其一

2.1动态载入

1.右键项目工程,选择属性,进入属性页

在这里插入图片描述
以Release—X64环境为例
2.选择链接器->常规->附加库目录输入
pthread\lib\v110\x64\Release\dynamic\cdecl
在这里插入图片描述
这里选择的是V110版本,X64环境,Release模式,动态载入,cdecl调用方式。
当然你也可以选择其他版本或者其他调用方式,只需要在文件夹中找到对应文件即可。

3.选择链接器->输入->附加依赖项输入
libpthread.lib
这个其实就是第2步中目标文件夹中的文件
在这里插入图片描述
在这里插入图片描述

4.选择C/C++ ->常规->附加包含目录输入
pthread\include
在这里插入图片描述
5.将 pthread\bin\v110\x64\Release\dynamic\cdecl 目录下的.dll放到项目工程目录
在这里插入图片描述
在这里插入图片描述

注意:这里的dll必须和lib相对应,除了开头的bin 和lib 文件夹有不同外,其他的路径是相同的

6.随意编写一个测试程序,如果程序正常启动表示环境搭建完成

#include<stdio.h>
#include<pthread.h>
#include<Windows.h>void*Function_t(void* Param)
{pthread_t myid = pthread_self();while (1){printf("线程ID=%d \n", myid);Sleep(1000);}return NULL;
}int main()
{pthread_t pid;pthread_create(&pid, NULL, Function_t, NULL);while (1){printf("in fatherprocess!\n");Sleep(1000);}getchar();return 1;
}

2.2静态载入

使用动态载入的方式使得程序必须依赖其dll,如果dll丢失,将导致程序无法运行。所以,在某些时候,使用静态载入的方式,也是一种不错的选择。

1.右键项目工程,选择属性,进入属性页
在这里插入图片描述
同样,以Release—X64环境为例
2.选择链接器->常规->附加库目录输入
pthread\lib\v110\x64\Release\static\cdecl
在这里插入图片描述

3.选择链接器->输入->附加依赖项输入
libpthread-static.lib
这个其实就是第2步中目标文件夹中的文件
在这里插入图片描述
在这里插入图片描述
4.选择C/C++ ->常规->附加包含目录输入
pthread\include
在这里插入图片描述
5.选择C/C++ ->预处理器->预处理器定义输入
PTW32_STATIC_LIB;
在这里插入图片描述
6.使用2.1.6中的程序编译运行即可。

三、结语

不同的载入方式有着各自的优缺点,请依据项目需要进行选择。

如果你觉得这篇文章对你有帮助,请在文章的左下角点个赞,有问题欢迎留言,谢谢你的反馈。


http://chatgpt.dhexx.cn/article/UMscOAAe.shtml

相关文章

pthread_cond_timedwait函数使用

1 函数原型 #include <pthread.h>int pthread_cond_timedwait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,const struct timespec *restrict abstime); int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex); …

Pthread线程基础学习

后面会尝试使用冰搜和goole搜索来学习技术&#xff0c;互联网上知识的学习也是符合二八定律的&#xff0c;既然如此&#xff0c;我们何不去选择最好的文章呢。 文章参考&#xff1a; https://randu.org/tutorials/threads/ http://www.yolinux.com/TUTORIALS/LinuxTutorialPosi…

pthread 线程创建

1.1代码 #include <pthread.h> #include <stdio.h> #include <unistd.h>static int my_thread_func (void *data) {while(1){sleep(1);} }main() {pthread_t tid;int ret;// 1.创建接收线程ret pthread_create(&tid, NULL,my_thread_func, NULL);if(ret…

C语言pthread.h运用

线程概念 什么是多线程&#xff0c;提出这个问题的时候&#xff0c;我还是很老实的拿出操作系统的书&#xff0c;按着上面的话敲下“为了减少进程切换和创建开销&#xff0c;提高执行效率和节省资源&#xff0c;我们引入了线程的概念&#xff0c;与进程相比较&#xff0c;线程…

linux pthread头文件,pthread t 头文件_uint8 t 头文件_pthread t 头文件

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。 多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。 本…

Day 55 Linux 线程控制语句pthread_exit pthread_join pthread_detach pthread_cancel 线程属性

目录 1. 线程控制语句 1.1pthread_exit函数 1.2pthread_join函数 1.3pthread_detach函数 1.4pthread_cancel函数 控制原语对比 2. 线程属性 2.1线程属性初始化 2.2线程的分离状态 2.3线程使用注意事项 1. 线程控制语句 1.1pthread_exit函数 将单个当前线程退出 void…

pthread 线程基本函数

文章目录 一、int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);二、int pthread_join(pthread_t tid, void **thread_return);三、int pthread_detach(pthread_t tid);四、void pthread_exit(void *retval);五、int …

pthread

POSIX线程&#xff08;POSIX threads&#xff09;&#xff0c;简称Pthreads&#xff0c;是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统&#xff08;Unix、Linux、Mac OS X等&#xff09;中&#xff0c;都使用Pthreads作为操作系统的线程。 1、p…

线程以及pthread库的使用

一.什么是线程 你可以想象你一边听歌一边打游戏&#xff0c;如果是操作系统会怎么做呢&#xff1f;先执行 ListenMusic 再执行 PlayGame&#xff0c;还是先执行 PlayGame 再执行 ListenMusic 呢&#xff1f;好像都不太合适。为了实现这个目的&#xff0c;就需要引入线程这个概念…

多线程02---pThread简介

1.简介 pthread 是属于 POSIX 多线程开发框架。它是c语言提供的一个跨平台的多线程解决方案。由于其在iOS编程中&#xff0c;操作比较麻烦&#xff0c;一般不用&#xff0c;这里介绍仅仅作为了解。 2.pthread的使用 通过以下函数创建pthread&#xff0c;在C语言中类型的结尾…

Qt 无法识别的外部符号.无法解析的外部符号

原因: 很多博客都说了这个原因,是因为后续在自己的类中,引入Q_OBJECT , 导致vs无法自动生成 moc_XXX.cpp类似的文件, 编译时候,找不到导致的(符号链接). 他人解决办法: 看了很多博客,说用moc_xx.exe, 重新生成对应的.h头文件,一下,就可以了;有的建议重新把类添加一下,然后清…

Qt项目 无法解析的外部符号_WinMainCRTStartup

1、无法解析的外部符号_WinMainCRTStartup 在编译Qt项目的时候突然说找不到_WinMainCRTStartup函数&#xff0c;_WinMainCRTStartup是Qt的主函数。找不到可能是main函数不在工程中。 选中main.cpp点击编译 点击移除再重新添加

QT无法解析的外部符号问题

moc_widget.obj:-1: error: LNK2019: 无法解析的外部符号 "private: void __thiscall Widget::on_pushButton_6_clicked(void)" (?on_pushButton_6_clickedWidgetAAEXXZ)&#xff0c;该符号在函数 "private: static void __cdecl Widget::qt_static_metacall(c…

QT疑难解决:无法解析的外部符号

无法解析的外部符号 _imp_XXXXXXXXX 出现字符_imp&#xff0c;说明不是真正的静态库&#xff0c;而是某个动态库的导入库&#xff0c;导入函数和自己不同名&#xff0c;所以加了字符_imp。 引入相应库 打开MSDN搜索函数xxxxx&#xff1a;http://msdn.microsoft.com/en-us/dn…

CUDA编程时遇到无法解析外部符号threadIdx或blockIdx问题的解决办法

在CUDA编程时遇到出现无法解析外部符号threadIdx或blockIdx问题的解决办法 在CUDA编程之前要确保工程项目的配置属性一致性如图一所示。然后点击项目—>属性确保配置属性无误。 VC 目录 可执行文件目录&#xff1a;…\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin 包含目…

LNK2019 无法解析的外部符号

LNK 2019 遇到了很多次这个错误&#xff0c;会持续更新遇到该错误产生的原因和解决方法 这个错误是由于我们调用的函数所定义的某个文件在编译时没有正确链接导致的&#xff0c;错误显示如下&#xff1a; 然后根据错误提示找到该函数 ImGui_ImplOpenGL3_Shutdown();ImGui_Impl…

无法解析的外部符号解决方法

步骤1&#xff1a; 按无法解析的顺序来解决问题 比如有两个无法解析&#xff0c;先解决第一个。 步骤2&#xff1a; 点击LNK2001,会跳转到网页&#xff0c;网页会提示哪些无法解析的问题是由哪个无法解析的错误引起的&#xff0c;这样可以减少解决无法解析的错误。 步骤3. …

无法解析的外部符号问题小结

问题1&#xff1a;在编写通信相关程序中&#xff0c;引用了一个静态库&#xff08;该静态库编译没有问题&#xff0c;并被其他项目引用&#xff09;&#xff0c;该库是对SOCKET的一个封装。基本结构如下&#xff1a; 在属性中添加了该库的引用后&#xff0c;编译仍然报错&#…

无法解析的外部符号main

今天在写程序的时候遇到个问题&#xff1a; 然后就去看了相应的解决方法 发现都不管用&#xff1a; 1.不是文件名.c或.cpp的问题 2.不是没有包含相应头文件的问题 3.不是写的控制台程序而使用的Windows连接程序&#xff08;Winmain&#xff09; 最后发现是因为在刚开始打开项…

无法解析的外部符号xxx 该符号在函数xxx中被引用

无法解析的外部符号xxx 该符号在函数xxx中被引用 更多相关错误可查看&#xff1a;https://blog.csdn.net/weixin_44120025/article/details/115279563 下面主要讲述一个解决方案中包含多个项目且它们之间互相引用的情况。 在一个解决方案已经有多个项目的情况下创建一个项目&am…