C++多线程编程

a 夏天 提交于 2020-01-10 21:06:16

注:不要生磕博客,找水平最适合你的,记得目的是解决问题(付出尽量少的时间),而不是抠细节的全面学习。

一、对线程的理解

基本概念:

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++多线程编程(入门实例) 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!