文章目录

  • ​​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)线程安全问题