zoukankan      html  css  js  c++  java
  • 多线程

    1.创建多线程

    • Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来创建线程;另外一种就是调用MSVC CRT的函数_beginthread()或_beginthreadex()来创建线程。
    • 相应的退出线程也有两个函数Windows API的ExitThread()和CRT的_endthread()。
    • 根据Windows API和MSVC CRT的关系,可以看出来_beginthread()是对CreateThread()的包装,它最终还是调用CreateThread()来创建线程。
    • _beginthread的对应函数_endthread自动的调用了CloseHandle,而_beginthreadex的对应函数 _endthreadex则没有,所以CloseHandle无论如何都是要调用的不过_endthread可以帮你执行自己不必写,其他两种就需要自己 写!(Jeffrey Richter强烈推荐尽量不用显式的终止函数,用自然退出的方式,自然退出当然就一定要自己写CloseHandle)

    (1)  _beginthread(myfun, 0, NULL)

    (2)  CreatThread(NULL, 0, myfun, NULL,0,NULL)

    例子:

    #include <stdlib.h>
    #include <Windows.h>
    #include <process.h>
    
    void fun(void *p)
    {
        for(int i=0; i<100; i++)
        {
            num++;
        }
    }
    
    
    int main()
    {
        HANDLE hd[100];
        for(int i=0; i<100, i++)
        {
            hd[i]=_beginthread(myfun, 0, NULL);    //数组的每一个元素都是一个线程
            //WaitForSingleObject(hd[i], INFINITE);  //同步,完成一个线程,在进行下一个
    。表示该线程不结束,不会开始下一步
    } WaitForMultipleObjects(100, hd, TRUE, INFINITE); //等待所有线程退出 printf("%d", num); system("pause"); }



    同步线程有一个问题,如果一个线程的运行时间很长,那么全部完成,需要花费很长时间。


    并行进行,不同步运行多个线程,最后得到的结果是不精确的



    2.计时函数(头文件time.h)
    void main()
    {
    time_t start, end;
    time(&start);
    程序语句
    time(&end);
    printf("%f",difftime(end, start));

    }

    3.临界区(头文件是Windows.h),
    CRITICAL_SECTION cs;    //定义全局,起到了控制线程的作用
    一般用多线程原则上使用cpp
    EnterCriticalSection(&cs);    //进入临界区

    LeaveCriticalSection(&cs);    //离开临界区


    临界区他不是一个变量,它是调用操作系统,让线程进入临界区,锁定一个变量。


    beginthread你只能让他互锁,你如果想让他不发生冲突,需要另一种创建线程的方法,creatthread,它是windows内部的,参数比较多。
    DWORD WINAPI myfun(void *)    //这里的WINAPI表明是申请的操作系统所调度的这么个线程。
    {
        for(int i=0; i<100, i++)
        {
        EnterCriticalSection(&cs);
        num++;
        LeaveCriticalSection(&cs);
        }
    }        
    DeleteCriticalSection(&cs);









  • 相关阅读:
    医学院现代教育技术中心(网络中心)研究
    计算机网络视频教程(上海交通大学)
    教育部普通高中信息技术课程标准成员介绍
    教育部普通高中信息技术课程标准
    数据库设计的三种范式
    普式游戏(pervasive game)
    帮你了解职业高中
    IP私有地址
    巧用组策略,让Windows登录更安全
    关闭SQL Server 2012智能感知代码提示功能
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5765130.html
Copyright © 2011-2022 走看看