C语言实现多线程

今天看了别人的博客实验出来了用C语言实现多线程编程。

参考的原博客链接如下,但是博主是在linux下实现的,和windows还不太一样,因为在windows库中默认不含pthread.h,需要在网上下载依赖,然后手动加载。

原博客:https://blog.csdn.net/weixin_33739541/article/details/86415801

在windows下配置pthread: https://blog.csdn.net/qianchenglenger/article/details/16907821

下面写写我在实现的过程中遇到的问题:

1. 首先根据《在windows下配置pthread》下载pthread,解压到本地。和博客中内容不符合的是我用的是visual studio 2017,安装文件夹都不太一样。所以我手动看看include和lib的文件目录在哪里。在我电脑下分别是:

D:\Program Files (x86)\Microsoft Visual Studio\VC\Tools\MSVC\14.16.27023\include

D:\Program Files (x86)\Microsoft Visual Studio\VC\Tools\MSVC\14.16.27023\lib

于是,我把pthread文件夹下的include和lib文件分别拷贝到安装目录下面。配置dll就按照博客的方法没问题。

但是经过上面一番好像还是报一堆问题,

于是乎,我看了第三篇博客,猜测可能是我的visual studio有多个版本,我也搞不清目前的安装目录在哪里, 于是还是按照下面博客的指导直接在visual studio中指明那些头文件和库文件的绝对路径。

https://blog.csdn.net/qq_36490200/article/details/88535336

2. 在第一步的基础上,在visual studio中手动指明文件路径:

A、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。

B、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。
C  然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名

3. 前面两步完成之后,发现还有一个错误,VS提示error C2011: “timespec”:“struct”类型重定义,于是看了第四篇博客,需要在使用的项目属性->预处理器->添加“HAVE_STRUCT_TIMESPEC”。因为pthread.h中有对于time.h的声明,和系统本身的time.h冲突了。

https://blog.csdn.net/qq_40958676/article/details/94378184

以上三步就搞定了。下面是测试的源码。

 


#include<stdio.h>
#include<string.h>
#include<windows.h> //Sleep()
#include<pthread.h>
#pragma comment(lib,"x64/pthreadVC2.lib") 


#define NUM 6
void print_msg(void* m);

int main()
{
	pthread_t t1, t2;
	pthread_create(&t1, NULL, (void *)print_msg,(void *)"hello,");
	pthread_create(&t2, NULL, (void *)print_msg,(void *)"world!\n");
	pthread_join(t1, NULL);
	pthread_join(t2, NULL);

	return 0; 
}
void print_msg(void* m)
{
	char *cp = (char*)m;
	int i;
	for (i = 0; i < NUM; i++)
	{
		printf("%s",cp);
		fflush(stdout);
		Sleep(10);
	}
}

测试了一下,//#pragma comment(lib,"x64/pthreadVC2.lib") 这个声明也可以隐掉,也不影响我调用pthread。

程序实现还有一个问题,每次打印的时候都发现第一个hello跑掉了。不知为何?

接下来再测试一下。

-----------------

world!
hello,world!
hello,world!
hello,world!
hello,world!
hello,world!
hello,

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值