zoukankan      html  css  js  c++  java
  • MFC事件和线程

    HANDLE WINAPI CreateThread
    ( 
      __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes, // 指向SECURITY_ATTRIBUTES 的指针,为新线程指定安全描述 
      __in       SIZE_T dwStackSize, // 初始化线程堆栈尺寸 
      __in       LPTHREAD_START_ROUTINE lpStartAddress, //线程函数所指向的地址起始函数   
    __in_opt   LPVOID lpParameter, // 给线程函数传递的参数   
    __in       DWORD dwCreationFlags, // 有关线程的标志  
     __out_opt  LPDWORD lpThreadId //系统分配给线程的ID
    
     );
    ----第一个参数是安全属性,一般设为null,使用缺省的安全属性。当我们想此线程有另外的子进程时,可改变它的属性。 
    ----第二个参数是线程堆栈尺寸,一般设为0,表示与此应用的堆栈尺寸相同,即主线程与创建的线程一样长度的堆栈。并且其长度会根据需要自动变长。 
    ----第三个参数,也是最重要的一个,是一个指向函数名的指针,或者函数名字 
    ----第四个参数是你需要向线程函数传递的参数,一般是一个指向结构的指针。不需传递参数时,则这个参数设为null。 
    ----第五个参数,传入与线程有关的一些标志,如果是CREATE_SUSPENDED,则创建一个挂起的线程,即这个线程本身已创建,它的堆栈也已创建。
      但这个线程不会被分配给CPU时间,只有当ResumeThread函数被调用后才能执行;当然,也可以调用SuspendThread函数再次挂起线程。要是标志为0,那么一旦建立线程,线程函数就被立即调用。一般传为0即可。 
    ----第六个参数是系统分配给这个线程的唯一的ID标志 

    事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。

    产生事件对象的函数如下:  

    HANDLE     CreateEvent(

            LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     SD   
            BOOL     bManualReset,                                                 //     reset     type   
            BOOL     bInitialState,                                                      //     initial     state   
            LPCTSTR     lpName                                                       //     object     name   
        );   
        该函数创建一个Event同步对象,如果CreateEvent调用成功的话,会返回新生成的对象的句柄,否则返回NULL。

    参数说明:
        lpEventAttributes     一般为NULL   


        bManualReset               创建的Event是自动复位还是人工复位.如果true,人工复位,   一旦该Event被设置为有信号,则它一直会等到ResetEvent()API被调用时才会恢复 为无信号.     如果为false,Event被设置为有信号,则当有一个wait到它的Thread时,  该Event就会自动复位,变成无信号.   如果想 在每次调用WaitForSingleObject 后让WINDOWS为您自动地把事件地状态恢复为”无信号”状态,必须把该参数设为FALSE,否则,您必须每次调用ResetEvent函数来清除事件 的信号。


        bInitialState             初始状态,true,有信号,false无信号   
        lpName                  事件对象的名称。您在OpenEvent函数中可能使用。

    通过WaitForSingleObject或者GetOverlappedResult来判断事件,从而控制线程。

  • 相关阅读:
    Spring Security教程(一):初识Spring Security
    权限管理系统(二):权限管理系统介绍
    OAuth 2.0介绍
    Java的spi介绍和简单应用
    Spring Boot 2.0官方文档之 Actuator(转)
    Nginx(三):日志文件管理
    Mybatis(五):Mybatis的三种使用方式
    Mybatis里Mapper映射sql文件里insert的主键返回selectKey使用
    Mybatis(四):MyBatis核心组件介绍原理解析和源码解读
    flask-限流器
  • 原文地址:https://www.cnblogs.com/smh2015/p/6293975.html
Copyright © 2011-2022 走看看