my_cp
2022-02-24 13:24:51 2 举报
项目流程示意图
作者其他创作
大纲/内容
不断更新数量
结合各个子线程退出
获取信息
获取纵横偏移字符串
目标文件
写入
填写复制方法
否
读取 一定大小
标准输出
POSIX信号量V操作 记录返回值
定时同步刷新函数
申请在堆中3个大小可选 最大16kb越大的复制越快
是
打印整体实时进度
额外的处理用户输入输出的线程
对应的函数实现
逐个节点传递参数
负责在shell界面更新进度显示的线程
写入 读取大小
打开搜索
线程池线程根据复制方法 复制 源文件 到 目标路径
循环直到写完
收尾
初始化线程池
MyTaskArg链表 头{数量 first last} => { 源文件路径 st_mode 目标文件路径 大小 复制方法 POSIX信号量 返回值 ...} -> {...} -> {...} -> {...}->
源文件
复制方法
生成目标文件路径
全部任务完成 卸载线程池 报告成功失败数目 报告用时 卸载MyTaskArg链表准备退出
复制顺利完成?
解锁
准备阶段
打印最终信息
上互斥锁
向全体线程发送信号
标准IO
填写目标文件路径
创建复制st_mode
线程池内部tasks链表 头{数量 first last} => { 源文件路径 目标文件路径 复制方法 返回值...} -> {...} -> {...} -> {...}->
用户更改线程数量
目标路径
读取
各个线程分别打印进度
用户取消
标准 | 系统
待复制路径
读写缓冲区
添加任务
用户功能选择
递归搜索
文件夹
卸载任务 填返回值
用户暂停 继续
消息队列
条件量唤醒
全部完成
是否文件夹
入队
任务全部完成 关闭线程池
输出内容缓存文件my_sscreen
系统IO
标准IO/系统IO
根据任务数量动态创建、删除线程
输入
添加节点 填写源文件路径 和其他信息
POSIX信号量V操作 记录错误
任务整体完成情况统计
0 条评论
下一页