(4.3)进程管理之线程
原创
©著作权归作者所有:来自51CTO博客作者喜欢打篮球的普通人的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
- 1.线程的概念
- 2.线程技术的典型适用场景
- 3.各平台创建线程的说明
- 4.使用线程的缺点
1.线程的概念
(1)步骤1,编写画圆和画方的两个函数
//画圆的函数
DWORD DrawCircle(LPVOID lpParam);
//实现画方的函数
DWORD DrawRect(LPVOID lpParam);
(2)步骤2:在程序中调用上述2个函数
void DrawCircleAndRect()
{
int i,j;
DrawCircle( );
DrawRect( );
}
先画圆,后画方。
顺序执行DrawCircle() 和DrawRect()。
- 线程的概念:
(1)线程是可由CPU直接运行的实体;
(2)一个进程可以创建多个线程;
(3)多个线程共享CPU,可以实现并发运行;
eg:利用线程技术实现并发画圆和画方
(1)CreatThread()
功能:把一个函数创建为一个线程
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_ROUTINE ThreadFunction,//线程函数
LPVOID lpParameter//线程函数的参数
)
(2)线程函数的原型
DWORD ThreadFunction(LPVOID lpParameter)//参数
(3)用线程实现并发画圆和画方
void DrawCircleAndRect()
{
int i,j;
//画圆线程
CreateThread(0,0,DrawCircle,0);
//画方线程
CreateThread(0,0,DrawRect,0)
}
创建线程的关键:把DrawCircle()和DrawRect()作为参数传递给CreatThread()
- 单线程程序和多线程程序
(1)单线程程序:整个进程只有一个线程。Windows程序缺省只有一个线程(主线程,main线程)
(2)多线程程序:整个进程至少有2个线程。主线程(由进程缺省创建)和至少1个用户线程。
2.线程技术的典型适用场景
- (1)多个功能需要并发的地方
- (2)需要改善窗口交互性的地方
- (3)需要改善程序结构的地方
- (4)在多核CPU上的应用,充分发挥多核性能
3.各平台创建线程的说明
(1)win32库创建线程,创建到当前进程空间
CreateThread(线程函数,参数)
(2)MFC创建线程:由(1)封装
AfxBeginThread(线程函数,参数)
(3)创建远程线程:创建到其它进程空间
CreatRemoteThread(进程,线程函数,参数)
(4)Linux创建线程:
pthread_create(线程函数,参数)
由POSIX定义的Linux线程库(Pthreads)
特点:
#include<pthread.f>
pthread_function()
int pthread_create(pthread_t *thread,
pthread_attr_t *attr,
void *(*ThreadFunction)(void *),
void *arg);
参数:
thread:返回的线程句柄
attr:指定线程的属性;
ThreadFunction:线程函数的入口地址;
arg:线程函数的参数
4.使用线程的缺点
- (1)线程难以调试,和顺序执行相比
- (2)并发过程难以控制,多个线程访问共享变量
- (3)线程安全问题