当前位置:首页 > 手机电脑 > windows系统 > Windows多线程

Windows多线程

2016-10-16 14:08:14[windows系统]点击数:作者:林多的博客来源: 网络
随机为您推荐的文章:Win8应用商店安装软件失败提示0x80240437如何解决

  从Win8系统开始就拥有应用商店功能,用户需要软件的时候不用去网络上海里捞针,在应用商店里能够找到你需要的任何程序。但是有用户在应用商店安装软件的时候出现失败,提示0x

程序和进程

程序:计算机指令的集合,以文件形式存储在磁盘上。
进程:一个正在运行的程序的实例,是程序在其自身的地址空间中的一次执行活动。多次执行,代表多个进程。

进程的组成:内核对象和地址空间。内核对象是系统用来存放关于进程 统计 信息的地方,是一个内存块,由操作系统分配,是一种数据结构,简单说负责维护进程。地址空间包含所有可执行的模块和DLL模块的代码和数据,包含动态分配的内存空间。

线程

真正完成代码执行的是线程,进程是线程运行的环境,或者说是线程的容器。

线程的组成:
内核对象,维护线程。
线程栈,维护线程执行过程中所有函数参数和局部变量。

线程的运行:宏观上看好像是同时运行,微观上系统为每个线程分配一个时间片。在 多CPU的机器上,可以实现线程真正的同时执行。

Windows 创建线程的函数CreateThread,其原型:

HANDLE CreateTreah
(
LPSECURITY_ATTRIIBUTES lpThread,//安全属性,默认NULL
DWORD dwStackSize,//线程栈大小KB
LPTHREAD_START_ROUTINE lpStartAddress,//线程函数起始地址
LPVOID  lpParameter,//命令行参数
DWORD dwCreateionFlags,//创建标志(是否创建后运行)
LPDWORD lpThreadId//线程ID
);

单线程例子:

#include<Windows.h>
#include<iostream>
using namespace std;
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
int index = 0;
void main()
{
    HANDLE hTread1;
    hTread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
    CloseHandle(hTread1);

    cout << "Main thread runing\n";
    Sleep(10);
};
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
    cout << "Thread1 is running\n";
    return 0;
}

互斥量:对于多线程,使用一个资源,该将资源声明为互斥量。互斥量由一个线程占用资源,只有将资源释放后,才能由其他进程使用。
多线程例子(火车站卖票,两个线程一起卖票):

#include<windows.h>
#include<iostream>
using namespace std;

DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);

int index = 0;
int tickets = 1000;
HANDLE hMutex;
void  main()
{
    HANDLE hTread1;
    HANDLE hTread2;
    hTread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
    hTread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);
    CloseHandle(hTread1);
    CloseHandle(hTread2);

    hMutex = CreateMutex(NULL, FALSE, NULL);

    Sleep(4000);
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{

    while (TRUE)
    {
        WaitForSingleObject(hMutex, INFINITE);
        if (tickets > 0)
        {
            cout << "1 sell ticket:" << tickets-- << endl;
        }

        else
            break;
        ReleaseMutex(hMutex);       
    }

    return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{

    while (TRUE)
    {
        WaitForSingleObject(hMutex, INFINITE);
        if (tickets > 0)
        {
            cout << "2 sell ticket:" << tickets-- << endl;
        }

        else
            break;
        ReleaseMutex(hMutex);
    }
    return 0;
}

注意:DWORD其实就是 unsigned long int 类型,HANDLE其实就是 void* 。WINAPI 其实就是_stdcall。无非是换个名称而已。

以上就是Windows多线程的全文介绍,希望对您学习Windows的使用有所帮助.

这些内容可能对你也有帮助

更多windows系统可查看windows系统列表页。