1 Star 2 Fork 0

yhuan416 / HTTP_DOWNLOAD_LIB

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Author:YHUAN
Date:19/11/30
Version:1.0

HTTP 下载线程池

这是我自己写的HTTP下载线程池,写的不算好,功能很简单,只能实现简单的HTTP下载请求

下载结果会有三种状态
success/interrupt/fail
用户可以通过回调函数去处理这三种结果(具体参考下面的例子)


用法1:直接调用下载任务函数进行下载

struct down_task *init_down_task(const char *host, const char *url, const char *filepath, uint32_t buf_size, func_t cb_func);
获取下载任务结构体
host:http服务器的IP
url:http请求的URL
filepath:文件保存的本地路径
buf_size:下载时的缓冲区大小
cb_func:下载结束的回调函数

int HTTP_Download(struct down_task *task);
进行下载
task:初始化成功的下载任务结构体

void free_down_task(struct down_task *task);
释放下载任务结构体
task:初始化成功的下载任务结构体

例程:

...  

//下载结果回调函数  

void down_cb(struct down_task *task, int ret)  
{  
	if (ret == 0)  
	{  
	down_success(task);  
	}  
	else if (ret == -2)  
	{  
	down_interrupt(task);  
	}  
	else  
	{  
	down_fail(task);  
	}  
}  

...  

struct down_task *task = init_down_task("192.168.199.118", "/pic/1.bmp", "1.bmp", 4096, NULL);  
int ret = HTTP_Download(task);  

//非必须  
down_cb(task, ret);  

free_down_task(task);  

...  

用法2:使用线程池进行下载

struct Http_Down_t *HTTP_Download_init(uint32_t set_num, uint32_t max_num);
初始化线程池:
set_num:线程初始化后的初始工作线程数
max_num:线程的最大线程数

注意:线程池成功初始化后只有一条工作线程,同时会有一条管理线程每两秒对工作线程数进行判断,随时添加线程
另外,当设置线程数小于当前线程数时,非睡眠状态的工作线程会设置分离属性并退出

int HTTP_Download_close(struct Http_Down_t *ctrl);
线程池的关闭:
ctrl:运行中的线程池


void HTTP_Download_get_bufsize(struct Http_Down_t *ctrl, uint32_t *size);
void HTTP_Download_set_bufsize(struct Http_Down_t *ctrl, uint32_t size);
设置/获取下载缓冲区大小的设置:

注意:设置的时候,会对线程池进行上锁操作

void HTTP_Download_get_setthreadnum(struct Http_Down_t *ctrl, uint32_t *num);
void HTTP_Download_set_setthreadnum(struct Http_Down_t *ctrl, uint32_t num);
设置/获取工作线程数的设置:

注意:设置的时候,会对线程池进行上锁操作


int HTTP_Download_add_task(struct Http_Down_t *ctrl, const char *host, const char *url, const char *filepath, func_t cb_func);
添加下载任务:
ctrl:运行中的线程池
host:IP
url:URL
filepath:文件保存的本地路径
cb_func:下载结果回调函数

注意:使用线程池添加任务进行HTTP下载时,会自动调用上面提及的初始化下载结构体函数。
此时,下载时的缓冲区大小使用线程池配置的大小。
下载任务执行完毕后,会把下载的结果和任务结构体传入回调函数,用户可以配置回调函数,对下载后的文件进行处理

例程:

...  

//下载结果回调函数  
void down_cb(struct down_task *task, int ret)  
{  
	if (ret == 0)  
	{  
	down_success(task);  
	}  
	else if (ret == -2)  
	{
	down_interrupt(task);  
	}  
	else  
	{  
	down_fail(task);  
	}  
}  
   
...  

int main()  
{  
	...  

	//初始化下载线程  
	struct Http_Down_t *Download = HTTP_Download_init(1, 5);  
	if (Download == NULL)  
	{  
	return -1;  
	}  
	
	//设置buf大小  
	HTTP_Download_set_bufsize(Download, (1024*32));  

	//设置工作线程数  
	HTTP_Download_set_setthreadnum(Download, ret);  

	//添加下载任务  
	HTTP_Download_add_task(Download, "192.168.95.215", "/pic/6.bmp", "6.bmp", down_cb);  

	//关闭下载线程池  
	HTTP_Download_close(Download);  

	...  

	return 0;  
}  
Copyright (C) 2019 YHUAN   Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

myself http download lib 展开 收起
C
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/yhuan416/HTTP_DOWNLOAD_LIB.git
git@gitee.com:yhuan416/HTTP_DOWNLOAD_LIB.git
yhuan416
HTTP_DOWNLOAD_LIB
HTTP_DOWNLOAD_LIB
master

搜索帮助