项目中多线程的使用
来源:互联网 发布:零点网络 编辑:程序博客网 时间:2024/05/16 11:58
如下两篇文章对Linux 多线程讲的比较深入,详细:
Linux pthread详解
http://blog.csdn.net/xueye3000/article/details/7024365
Linux Pthread 深入解析
http://blog.chinaunix.net/uid-21084809-id-2215376.html
1. 项目中需要用到多线程, 为了使用的方便,将线程进行了封装,将Thread封装成一个接口类。virtual void* Run() = 0; 为纯虚函数。static void* Run(void*);为静态函数。
2. Thread 类继承了NoCopy(详见c/c++复制控制)。实现Thread对象不可被赋值,不可复制。
线程的创建过程:
每个要创建线程的任务都会有一个Thread * m_thr;这样的数据成员。这些任务:
MBusMac.cc: Thread * m_thr;
TransInterface: Thread* m_pPollThr;
Thread* m_pConnThr;
网络连接线程的创建
new CommLink(newsock);
class CommLink : public Thread 继承线程Thread
在CommLink 的构造函数中,CommLink(int sock) : Thread(65536), d_sock(sock) 此处在Thread的构造函数中
线程属性初始化
pthread_attr_init(&d_attr);初始化了线程属性。设置了线程栈
pthread_attr_setstacksize(&d_attr, stacksize); stacksize为65535。
pthread_attr_setinheritsched(&d_attr, PTHREAD_INHERIT_SCHED); //继承主线程的属性
线程启动
m_comm->Start(); 调用了Thread中的start函数,在其中创建了线程:
!d_started && pthread_create(&d_thread, &d_attr, Run, this) == 0
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0); // 设置收到取消信号后立即退出,如果
是PTHREAD_CANCEL_DEFFERED延时取消,则运行到下一取消点时退出。
在Run里面调用派生类的Run()。从而启动了一个线程。
线程退出
在线程退出后,调用pthread_cleanup_pop(1);(前面必须有pthread_cleanup_push(Cleanup, p);)。 然后Cleanup会对线程做清理工作。delete this;。
然后会调用:
Thread::~Thread()
{
if (d_started)
pthread_detach(d_thread);
pthread_attr_destroy(&d_attr);
}
将线程设为分离状态,销毁属性。
Thread::Wait() 中封装了join函数
在进程主函数(main())中调用pthread_exit(),只会使主函数所在的线程(可以说是进程的主线程)退出;而如果是return,编译器将使其调用进程退出的代码(如_exit()),从而导致进程及其所有线程结束运行。
- 项目中多线程的使用
- web项目中使用多线程的一些坑
- 多线程中定时器的使用
- 多线程中定时器的使用
- 多线程中定时器的使用
- 多线程中定时器的使用
- .net中多线程的使用
- 多线程中定时器的使用
- 多线程中定时器的使用
- 多线程中rand()的使用
- 多线程中atfokr的使用
- iOS中多线程的使用
- iOSh中多线程的使用
- Java中多线程的使用
- Qt中多线程的使用
- iOS中多线程的使用
- 多线程中ReentrantLock的使用
- ios中多线程的使用
- 添加android-support-v4 错误 java.lang.ClassNotFoundException: android.support.v4.view.ViewPager in loade
- Android使用内置Camera应用程序进行图像捕获
- fufs环境搭建
- MFC 关键技术之永久保存
- UITableView实例详解
- 项目中多线程的使用
- java虚拟机常用命令工具
- Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
- 借鉴的学习计划
- hdu1405
- C风格字符串(C—style character string)
- PHP_带smtp验证的发邮件函数
- C#中char数组转化为string
- FPGA开发之--Verilog中的位移指令