linux C 主线成与子线程参数传递

Linux多线程网络服务器开发详解 本文介绍了如何将单线程服务器改造为多线程版本以提高并发处理能力。核心设计思路是主线程监听连接请求,每个客户端连接由独立子线程处理。实现步骤包括:定义客户端信息结构体、创建全局结构体数组、编写子线程处理函数和主函数实现。关键技术点包括参数转换、阻塞读取和资源释放。文章提供了完整的C语言代码示例,展示了多线程服务器的实现过程,包括初始化客户端数组、设置端口复用、创建监听套接字、绑定地址端口、循环接受连接并创建子线程处理通信等关键环节。 阅读详情

#include <stdio.h>
#include <pthread.h>

void* fun(void* arg)
{
 
 
 printf("======[%d]====\n",(int)arg);  
 pthread_exit((void*)22);
}

int main(void)
{

 pthread_t tid; 

 pthread_create(&tid,NULL,fun,(void*)99);    //你没注意的东东
 void *val;
 pthread_join(tid,&val);
 printf("------[%d]-----\n",(int)val);


 return 0;
}

第二种传结构体    
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

typedef struct 
{
	int a;
	float b;
	
}*LYp,LY;

LYp sheep;
float f=0;
void* fun(void* arg)
{
	LYp p=(LYp)arg;
	printf("===[%d]===[%f]====\n",p->a,p->b);
	f=1.234;		
	pthread_exit(&f);
}

int main(void)
{
	sheep=malloc(sizeof(LY));
	sheep->a=100;
	sheep->b=3.33;
	pthread_t tid;	

	pthread_create(&tid,NULL,fun,sheep);
	void *val;
	pthread_join(tid,&val);
	printf("------[%lf]-----\n",*((float*)val));

	free(sheep);


	return 0;
}

//第三种 通过全局变量传递好用
 



 

Linux C 主线程与子线程之间的参数传递编程 通过正确地传递参数,我们可以在不同的线程之间共享数据,并实现复杂的并发逻辑。总结而言,通过适当地使用函数参数,可以在Linux C编程中实现主线程与子线程之间的参数传递。在创建子线程时,将参数作为函数的参数传递给子线程,并在子线程函数中正确地解析参数。这样,我们可以在不同的线程之间共享数据,并实现复杂的并发逻辑。需要注意的是,在实际的应用中,我们需要确保传递的参数在子线程使用期间保持有效。在创建子线程时,我们可以将参数作为函数的参数传递给子线程。传递给了子线程,并在子线程中打印了接收到的参数值。 阅读详情

相关推荐

ComfyUI安装包运行前准备:安装Git

Git 是一个分布式版本控制系统(Version Control System, VCS),用于跟踪和管理文件(尤其是代码)的变更历史。 简单理解就是,git是用来管理文件的版本的,如果有新的版本,就可以使用git来更新。

聚梦小课堂 2万+

linuxc多线程参数传递

#include #include struct stu   {       int age;     char *name;     char *num; };   void thread1(void) {     int i;     for(i=0;i     {         printf("This is a pthread1.\n");   

1525

Xilinx PL端DP显示接口开发实战(一)——环境搭建与硬件选型

本文详细介绍了Xilinx PL端DP显示接口开发的环境搭建与硬件选型实战经验。从Vivado和Vitis 2021.1版本的软件安装要点,到DP141和MCDP6000芯片的选型建议,再到DP1.4接口的RX/TX方向开发关键点,为开发者提供了全面的技术指导。文章还分享了IP核配置、BD原理图设计以及常见问题排查的实用技巧,帮助开发者高效完成Xilinx DP接口开发项目。

weixin_29250573的博客 171

linux多线程参数的传递

结果都是5,这里出现这种结果的原因就是你创建线程是按照顺序创建的,但是你的mainfunc()函数不一定是创建一个就输出一个,所以都是等主线程都执行完毕了,var这个时候已经等于5了,所以你最后输出的结果那肯定都是5。通常指针都是存地址,但是我这里我想传值进去,因为如果传地址那不就是和前面的全局变量没有什么区别了,所以这里我们要传值进去,就得强制类型转化一下。这样就都分开了,顺序不一样是正常的,因为编译器的优化问题,所以顺序不一样很正常,我们只需要知道结果是每一个线程都知道了自己准确的编号了。

qq_61667084的博客 1440

UE5笔记【十二】蓝图函数BluePrint Function

蓝图函数BluePrint Function。蓝图类。蓝图变量。

xiaoyaolangwj的博客 4393

《网络摄像机实战⑦:嵌入式端AWS KVS IoT SDK 库编译与测试全流程-君正/瑞芯微/全志(超详细指南)》

本文介绍了AWS音视频和物联网解决方案的核心组件与集成方法。主要内容包括:1)Amazon Kinesis Video Streams(KVS)提供的WebRTC托管服务,支持实时音视频流传输与双向交互;2)AWS IoT云服务实现设备连接与集成;3)详细说明了KVS WebRTC库的编译过程,包括源代码下载、CMake配置和依赖库生成;4)KVS Producer库的集成方法,重点阐述了存储空间调整和mbedtls版本适配等关键修改点。文章为开发者提供了AWS音视频和物联网服务的技术实现指南,特别针对嵌入

lvj_158的专栏 109

c++多线程如何传递参数(值传递,引用传递)

c++多线程如何传递参数(值传递,引用传递) 转自 chen沉尘【C++多线程】 感谢作者,我只是个搬运工 线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制

Vincent_Chiang的博客 1万+

ROS & ROS2 机器人深度相机激光雷达多传感器标定工具箱

不过,多传感器标定工具箱允许通过编辑 yaml 文件来调整标定目标的参数: <repository>/mutlisensor_calibration/cfg/TargetWithCirclesAndAruco.yaml%YAML:1.0rows: 4cols: 1dt: irows: 4cols: 2dt: frows: 1cols: 12dt: fCAD 模型网格/云通过 GICP 将模型数据与分割点云对齐,用于优化检测到的目标姿态。

2506_90492529的博客 2107

Linux(C语言):关于线程的创建(参数传递)、回收的示例

参数为结构体 将信息传递给子线程,子线程修改信息后(在buf后加个时间)传递给主线程 #include <stdio.h> #include <pthread.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <strings.h> typedef struct { int num; char buf[256]; }INFO; void *

weixin_48922642的博客 1364

STM32硬件SPI配置为全双工模式下不要单独使用HAL_SPI_Transmit API及HAL_SPI_TransmitReceive改造方法

STM32 HAL库中SPI全双工模式使用问题总结:当配置为全双工模式时,单独使用HAL_SPI_Transmit会导致后续接收数据异常,原因是该API未处理接收数据。改造HAL_SPI_TransmitReceive使其支持单纯的发送/接收模式:当pTxData为NULL时只关心接收数据,pRxData为NULL时只关心发送数据,但仍会保持全双工通信。建议在全双工模式下统一使用改造后的HAL_SPI_TransmitReceive函数。

kevin1499的博客 901

RK3566 Android11默认客户Launcher修改

【代码】RK3566 Android11默认客户Launcher修改。

Android系统开发笔记 1723

linux c线程pthread

linux线程与进程的区别进程间资源相互独立,只能通过线程间通讯接口交换资源和数据。而线程内存共享(变量)

m0_54442739的博客 861

如何对正射影像DOM(卫星影像、无人机航拍影像)进行拼接、合并以及去黑边(附 Global Mapper Pro 24.0 安装包(中文注册版))

为什么要对正射影像DOM进行拼接?影像去黑边、影像拼接的操作和步骤。

从地图看世界的专栏 4298

线程间的参数传递 分类: linux c/c++ ...

在多线程编程中,常常需要从主线程传递参数给子线程或在主线程中获得子线程的计算结果, 若使用全局变量实现,必然需要对临界区保护,因此导致大量的切换工作造成效率的低下; 而利用进程间的参数传递可以解决这一问题。 两个方向的参数传递: 1.主线程向子线程传递参数: 通过函数 int pthread_create(pthread_t *thread, const pthread_attr...

weixin_34119545的博客 551

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux C语言线程编程入门笔记

本文介绍了在Linux环境下使用C语言进行多线程编程的基础知识。首先,开发环境需要安装GNUC编译器和POSIX线程库,并通过gcc -pthread选项进行编译。线程是程序执行的最小单位,属于进程,多个线程共享进程的内存空间,但各自拥有独立的寄存器和栈空间。线程的生命周期包括新建、就绪、运行、阻塞/等待和终止等状态。创建线程使用pthread_create()函数,主线程可以通过pthread_join()等待子线程结束。线程函数必须符合void* func(void* arg)的形式,参数通过void*

weixin_45720999的博客 1027

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

嵌入式解谜日志之Linux操作系统—线程3

是进程内的执行单元,共享进程的内存和资源。同一进程内的多个线程可以并发执行,但线程崩溃可能导致整个进程终止。

2201_75637288的博客 1014

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux C/C++之线程基础

Linux C/C++之线程基础(线程同步实现---超详细)

ShiXiAoLaNga的博客 2612

Linux下C和C++多线程基础示例POSIX pthread

C代码示例:gcc example.c -lpthread; #include &lt;stdio.h&gt; #include &lt;pthread.h&gt; void* thread(int r) { int i; for(i=0;i&lt;3;i++) printf("This is a pthread %d.\n",r); } in...

conservatism的专栏 186

Linux 线程编程入门:核心接口函数与实战演示

POSIX 全称是可移植操作系统接口(Portable Operating System Interface of UNIX),是 UNIX 系统的统一标准接口。而我们常说的pthread就是 POSIX 标准定义的线程库,是 Linux 下 C 语言开发多线程程序的标准方案。如果你的系统没有pthread:创建线程,启动并发任务:等待线程,同步线程执行:线程退出,返回执行结果。

2501_93836915的博客 175

在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)

下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗? 线程函数: DWORD WINAPI ThreadProc(     while(!bTerminate)     {         // 从一个链表中读取信息并且插入到CListCtrl中         // CListCtrl的句柄是通过线程参数传递进来的         for(;;)        

田群的专栏 1043

linux线程的创建

int pthread_create( pthread_t *thread), //线程ID = 无符号长整型。3. 将变量(所有类型)的地址强转成void*类型进行传递,就和在普通函数调用传递变量的地址相似。类型的指针,只要是指针,32位系统上都是4个字节,值传递就只能传递小于或等于4字节的值。void *(*start_routine)(void *), //线程处理函数。const pthread_attr_t *attr, //线程属性,NULL。一个进程内的所有线程是共享这个进程的地址空间。

m0_57678852的博客 384

Linux ----线程的创建、等待退出

一、线程的创建和退出 1、创建一个简单的线程 #include <func.h> void* threadFnc(void *p){ printf("I am child thread\n"); } int main(int argc,char* argv[]) { pthread_t pth; int ret=pthread_create(&pth,...

weixin_43574252的博客 268

Liunx C 编程之多线程与Socket

多线程 pthread.h是linux特有的头文件,POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。 创建线程1.pthrea...

weixin_30755393的博客 652

Linux线程基础

简介 创建线程 #include &lt;pthread.h&gt; int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); thread:线程标识符 attr:线程的属性,设置为NULL则...

Erick Lv的笔记 167

Linux c/c++服务器开发实践

在Linux C++开发环境中,通常有两种方式来开发多线程程序,一种是利用POSIX多线程 API函数来开发多线程程序,另外一种是利用C++自带线程类来开发程序。pthread_join是个阻塞函数,函数pthread_join会让主线程挂起(即休眠,让出CPU),直到子线程都退出,同时pthread_join能让子线程所占的资源得到释放。子线程退出以,主线程会接收到系统的信号,从休眠中恢复。

weixin_42692164的博客 1091
上一篇: linux c 创建守护进程
下一篇: 不包含全头文件的后果相当严重
MrBugYang
博客等级 码龄18年 21粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值