最近在工作中有了搭建一个可重用的多线程框架的想法,尝试着做了实现。
1. 线程管理
线程池是必不可少的,出于开发时间的考量,使用glib的线程池api作为底层,进行封装;
封装时遇见了C风格和C++的冲突问题,如何定义让回调函数能够使用的虚函数?最后的解决方案是定义一个static的成员函数作为callback的adapter,传入this指针调用实际的process成员函数;
使用g_thread_pool_new创建新的线程池之前,需要做一个检查!
if(!g_thread_supported()) {
g_thread_init(NULL);
}
这样才能够避免出现由于g_thread_supported断言退出的情况。