经常看到一些朋友们在使用线程时出问题。不管是新手还是老手,使用系统原始的 API 启动线程,都容易出错。我觉得这是因为线程 API 是操作系统暴露出来的底层 API,不适合应用开发者使用。经过多年的实践,我建议大家在 C++ 环境里面只使用一种方案: QtConcurrent 或者类似的 map/reduce 替代品。
不过,一定要注意传入 QtConcurrent::run() 的函数必须是无副作用纯函数,不修改任何外部的变量,输出只取决于输入。这里的不修改,也包含了对象的构造函数与析构函数,所以尽量传 QSharedPointer<> 而不要给这个纯函数析构对象的机会。
--
FROM 110.81.1.*