zoukankan      html  css  js  c++  java
  • 工作中线程的使用

    1.HANDLE CreateThread(

      LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
      SIZE_T dwStackSize,                       // initial stack size
      LPTHREAD_START_ROUTINE lpStartAddress,    // thread function
      LPVOID lpParameter,                       // thread argument
      DWORD dwCreationFlags,                    // creation option
      LPDWORD lpThreadId                        // thread identifier

    );

    lpThreadAttributes 指向SECURITY_ATTRIBUTES结构体的指针,这里可以传递NULL。

    dwStackSize 设置线程初始栈的大小,即线程可以将多少地址空间用于它自己的栈,以字节为单位。系统会把这个 参数值四舍五入为最接近的页面大小。页面是系统 管理内存时使用的内存单位,不同CPU其页面大小不同,x86使用的页面大小是48kb。当保留地址空间的一块区域时,系统要确保该区域的大小是系统页面大小的倍数。例如,希望保留10kb的地址空间区域,系统会自动对这个请求进行四舍五入,是保留的区域大小是 页面大小的倍数,在x86平台下,系统将保留一块12kb的区域,即4kb的倍数。如果这个值为0,或者小于默认的提交大小,那么默认将使用与调用该函数的线程相同的栈空间大小。

    lpStartAddress  指向应用程序定义的LPTHREAD_START_ROUTINE类型的函数指针,这个函数将由新线程执行,表明新线程的起始地址。我们知道main函数是主线程的入口函数,同样地,新创建的线程也需要有一个入口函数,这个函数的地址就由此参数指定。这就要求在程序中定义一个 函数作为新线程的入口函数,该函数的名任意,但函数类型必须遵照下述声明形式 :

      DWORD WINAPI ThreadProc(LPVOID lpParamter)

    即新线程入口 函数有一个LPVOID类型的参数,并且返回值 是DWORD类型。

    lpParamter

    对main函数来说,可以接受命令行参数。同样,我们可以通过这个参数给创建的新线程传递参数 。该参数提供了一种将初始值传递给线程函数的手段。这个参数的值既可以是一个数值,也可以是一个指向其他信息的指针。

    dwCreateFlags 设置用于控制线程创建的附件标记。它可以是两个值中的一个:CREATE_SUSPENDED或者0。如果该值是CREATE_SUSPENDED,那么线程创建后处于暂停状态,直到程序调用了ResumeThead函数为止;如果该值是0,那么线程在创建之后就 立即执行。

    lpThreadId

     这个参数是一个返回值,它指向一个变量,用来接收线程ID。当创建一个线程时,系统会为该线程分配一个ID

    工作总结:

    1.通过收信按钮响应函数里面,创建获取信封头的线程,当此线程执行完毕后,通过窗口的this指针向窗口发送自定义消息,this->SendMessage(WM_USER,0,0);

      DWORD dwThreadID = 0;

        //开启线程 ,保存信封头
        HANDLE hThread = CreateThread(NULL,0,&CDuiFrameWnd::FetchEnvelopeThreadProc,(LPVOID)this,0,&dwThreadID);
        CloseHandle(hThread);

    2.在 WM_USER消息的响应函数里面,创建获取邮件实体的线程 ,后台进行把下载下来的数据保存到以.eml为后缀的文件里面,用MessageId进行命名。

      //开启线程,下载邮件
        DWORD dwThreadID = 0;
        HANDLE hThread = CreateThread(NULL,0,&CDuiFrameWnd::FetchBodyThreadProc,(LPVOID)this,0,&dwThreadID);
        CloseHandle(hThread);

  • 相关阅读:
    极光推送SDK通过泰尔终端实验室检测,符合统一推送接口标准
    极光小课堂|手把手教你做接口测试
    一键登录怎么在iOS端实现?这篇文章教会你!
    一键登录已成大势所趋,Android端操作指南来啦!
    极光一键登录:更快捷、安全的登录认证方式,简单集成即可实现
    跨浏览器问题的五种解决方案
    Laravel 搭建 Composer 包,实现配置 Config、门面 Facade、服务 Service、发布到 Packagist
    How to Install ClamAV on Ubuntu 20.04 and Scan for Vulnerabilities
    单点登录(SSO)看这一篇就够了
    一口气说出 OAuth2.0 的四种授权方式
  • 原文地址:https://www.cnblogs.com/chechen/p/3800020.html
Copyright © 2011-2022 走看看