注:不要生磕博客,找水平最适合你的,记得目的是解决问题(付出尽量少的时间),而不是抠细节的全面学习。
一、对线程的理解
基本概念:
1. 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,主要管理资源。
2. 线程:是进程的基本执行单元,一个进程对应多个线程。
3. 主线程:处理UI,所有更新UI的操作都必须在主线程上执行。不要把耗时操作放在主线程,会卡界面。
多线程:在同一时刻,一个CPU只能处理1条线程,但CPU可以在多条线程之间快速的切换,只要切换的足够快,就造成了多线程一同执行的假象。
二、从实例学习多线程
1.1 双线程实例
#include <iostream>
#include <windows.h>
using namespace std;
DWORD WINAPI Fun(LPVOID lpParamter)
{
for (int i = 0; i < 10; i++)
cout << "A Thread Fun Display!" << endl;
return 0L;
}
int main()
{
HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
CloseHandle(hThread);
for (int i = 0; i < 10; i++)
cout << "Main Thread Display!" << endl;
return 0;
}
结果:
1、主线程(Main函数)与分线程(Fun函数)并行运发,随机交替执行。
2、主线程先执行完后释放资源,子线程没有执行完。采用Sleep函数暂停线程执行。
3、采用endl清空缓冲区并换行,有时无换行,有时换行两次。原因是执行endl时时间片用完,cpu打断并切换线程。再回到此线程时先执行endl,形成两次换行。在内容中加入换行符,禁止切换线程打断换行。
4、可以在1.1的基础上使用互斥量锁,保证线程的交替完整执行。
1.2 多线程实例,采用sleep和/n
#include <iostream>
#include <windows.h>
using namespace std;
DWORD WINAPI Fun(LPVOID lpParamter)
{
for (int i = 0; i < 10; i++)
{
//cout << "A Thread Fun Display!" << endl;
cout << "A Thread Fun Display!\n";
Sleep(200);
}
return 0L;
}
int main()
{
HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
CloseHandle(hThread);
for (int i = 0; i < 10; i++)
{
//cout << "Main Thread Display!" << endl;
cout << "Main Thread Display!\n";
Sleep(500);
}
return 0;
}
1 3 1.1的基础上使用互斥量锁
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE hMutex = NULL;//互斥量
//线程函数
DWORD WINAPI Fun(LPVOID lpParamter)
{
for (int i = 0; i < 10; i++)
{
//请求一个互斥量锁
WaitForSingleObject(hMutex, INFINITE);
cout << "A Thread Fun Display!" << endl;
//释放互斥量锁
ReleaseMutex(hMutex);
}
return 0L;//表示返回的是long型的0
}
int main()
{
//创建一个子线程
HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
hMutex = CreateMutex(NULL, FALSE,"screen");
//关闭线程句柄
CloseHandle(hThread);
//主线程的执行路径
for (int i = 0; i < 10; i++)
{
//请求获得一个互斥量锁
WaitForSingleObject(hMutex,INFINITE);
cout << "Main Thread Display!" << endl;
//释放互斥量锁
ReleaseMutex(hMutex);
}
return 0;
}
参考链接:https://www.cnblogs.com/codingmengmeng/p/5913068.html C++多线程编程(入门实例)
来源:CSDN
作者:茶花煮酒
链接:https://blog.csdn.net/qq446293528/article/details/103901558