进程和线程

进程和线程:
*程序-运行-线程
//一个程序,在运行之前是硬盘上的一个文件,开始运行之后,就是一个进程
*一个进程至少有一个线程,一个进程可以有多个线程(其中有一个主线程)
*简单的程序设计,一个进程一个线程
*高级的程序设计,一个进程多个线程
*任务管理器可以查看进程,不可以查看线程
spy++既可以查看进程,也可以查看线程

  简单的程序设计只有一个线程,比如一个简单程序,当主线程还未完成操作时,这时"它"忙着完成
未完成的操作,如果这时用鼠标点击窗口等任何操作,“它”都不会响应,这就是主线程阻塞,比如    一个计算指定数字(由用户输入)以内的数字,当开始计算时,如果数字较大,花费时间较长,就会发    生主线程阻塞,这样操作性大打折扣了,高级的程序设计是一个进程多个线程,当开始计算时,新建一个线程来完成计算的工作,主线程来响应接收的操作,这样主线程就不会发生无响应了

多线程
*创建线程(主线程是自动创建的)
 CreateThread()        //Windows的函数
 _beginthread()        //c语言库中的函数,较为简便,在头文件<process.h>里
                       //其实还是_begintherad去调用CreateThread函数

*线程函数 
 void _cdeal ThreadProc(void *pParam);
接下来就做一个简单的例子吧,新建一个win32项目,不是空项目,然后消息循环里加上:
case WM_CREATE:
        _beginthread(Thread,//函数
            0,//第二个参数是新线程所需要使用的堆栈的大小,0表示有系统自动分配
            NULL);//函数参数,传给第ThreadA的,这里的例子没有用到
        //这样,在创建窗口的时候就创建了一个线程,具体线程干什么就去函数ThreadA里处理
        break;

接下来就可以去写Thread函数了,这里Thread就在创建的窗口随机画矩形吧,矩形大小,位置,填充颜色都是随机的,为了当窗口大小改变时任然可以画,所以也要处理WM_SIZE消息,所以将cxClient,cyClient和hWnd都定义为全局变量,以下是Thread函数:

VOID Thread(PVOID pvoid)
{
    HDC hdc;
    int xLeft, xRight, yTop, yBottom, iRed, iGreen, iBlue;
    HBRUSH hBrush;
    while (TRUE)
    {
        if (cxClient != 0 || cyClient != 0)
        {
            xLeft = rand() % cxClient;
            xRight = rand() % cxClient;
            yTop = rand() % cyClient;
            yBottom = rand() % cyClient;
            iRed = rand() % 255;
            iGreen = rand() % 255;
            iBlue = rand() % 255;

            hdc = GetDC(hWnd);//也可以设为NULL,直接在桌面上画,
            //这样就不用管cxClient,cyClient了
            hBrush = CreateSolidBrush(RGB(iRed, iGreen, iBlue));
            SelectObject(hdc, hBrush);
            Rectangle(hdc, min(xLeft, xRight), min(yTop, yBottom), max(xLeft, xRight), max(yTop, yBottom));

            ReleaseDC(hWnd, hdc);
            DeleteObject(hBrush);
            Sleep(1000);//让线程暂停,不然运行速度太快,这里就是1000毫秒
        }
    }
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中的进程线程有以下几个区别: 1. 数据结构:在Linux中,线程是通过进程模拟出来的,没有真正意义上的线程数据结构。而在Windows中,操作系统为线程创建了thread_struct数据结构,因此有真正意义上的线程。 2. 执行流:在Linux中,每个线程实体对应着操作系统下的一条执行流,通过PCB(task_struct)来模拟。而用户态下创建的线程是通过线程库(pthread_struct)来进行管理。 3. 标识作用:在Linux中,轻量级进程ID(tid)对不同的线程起标识作用,操作系统在进行调度时使用tid。而进程ID(pid)对不同的进程起标识作用。在只有一个线程进程中,tid的值等于pid的值。 4. 线程私有部分:线程私有部分包括运行时栈、一组寄存器/硬件上下文/任务状态段等。 5. 多线程提高效率:多线程能够提高效率的原因是多核和单核环境下的不同。在多核环境下,多线程可以将庞大的任务分成若干份,并交给不同的线程进行处理,同时执行不同步骤的代码,从而提高效率。而在单核环境下,多线程并发执行,使用线程切换来提高整体代码的运行效率。 6. 进程线程的区别:进程是程序运行的实例,是系统分配资源的基本单位,拥有独立的地址空间;线程进程中的一条执行流,是CPU调度的基本单位,共享同一地址空间。创建和撤销进程的开销大于线程,不同进程间不会互相影响,而一个线程挂掉可以将整个进程挂掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值