每一个垃圾选项做一个脚本文件,脚本文件可用 sqlite 存起来或者放到压缩包里,运行时解压文本。使用 boost.asio 做一个线程池,初始化数据后向线程池 post 任务,带一个脚本文件名参数,在任务方法里绑定 lua 引擎,绑定回调函数,并运行脚本(根据脚本文件名参数)。
在 lua 脚本里定义待清理内容的表结构,枚举文件大小相加,在脚本最后回调 C++ 对象方法,或者直接在 C++ 里读 lua Global 数据。
检测垃圾文件大小和真实删除
设置 lua 栈,参数化环境,如果为标志为检测,则只扫描,相加文件大小,最后返回文件总大小,可在中间步骤回调 C++ 对象方法,传递文件名,如果标志为删除,则删除文件。
清理垃圾文件进度
因为先执行一遍检测,保存了所有垃圾文件的总大小,删除过程中,(垃圾文件总大小 - 删除文件大小)/ 垃圾文件总大小 = 剩余进度。
** 注意 **
任务队列(线程池)放在 C++ 端执行,lua state 不能多线程共享,每一个任务方法都创建一个新的 lua state,并绑定 C++ 对象方法。