zoukankan      html  css  js  c++  java
  • 《Win32多线程程序设计》学习笔记 第9章 使用C++

    处理有问题的_beginthreadex()原型。

    优于C++编译器有更严格的类型检验,该该函数的参数第3个和第6个参数类型是unsigned int,而CreateThread是DWORD,是unsigned long。如果你声明的thrdaddr为DWORD确企图将”地址“交给他,就会出错。有2个解决方案:第一个是将变量声明为unsigned,第二个是将比那两声明为CreateThread中希望的类型,然后在调用_beginthreadex之前,在把它强制转换类型。

    以一个C++对象启动一个线程

     C++中隐藏的this指针是得我们在启动一个线程时会遇到一些问题。每个非静态的类成员函数都有一个隐藏起来的参数被推入堆栈之中。当编译器需要处理类的成员变量时,他需要这个隐藏参数的帮忙,这就是this参数(一个指针)。

     正确做法

    为了以一个成员函数启动一个线程,要么使用静态成员函数,要么使用C函数,本质一样,就是通过辅助函数正确建立“调用成员函数时所需要的堆栈” 。使用静态成员函数有一个优点,就是能够处理类的private和protected成员变量(如果是static的话)

    使用C++的自动析构特性建立比较安全的Critical Section

    class CriticalSection
    {
    public :
      CriticalSection();
      
    ~CriticalSection();
      
    void Enter();
      
    void Leave();
    private:
      CRITICAL_SECTION m_CritSect;
    };

    CriticalSection::CriticalSection()
    {
      InitializeCriticalSection(
    &m_CritSect);
    }

    CriticalSection::
    ~CriticalSection()
    {
      DeleteCriticalSection(
    &m_CritSect);
    }

    void CriticalSection::Enter()
    {
      EnterCriticalSection(
    &m_CritSect);
    }

    void CriticalSection::Leave()
    {
      LeaveCriticalSection(
    &m_CritSect);
    }

    这个只是一个例子,说明了C++的自动析构在编程中的应用

  • 相关阅读:
    网络编程基础之TCP编程学习(一)
    日常巡检(脚本)
    Mysql主主配置
    创建用户和相对应的随机密码
    企业网络连接测试
    Docker 方式部署 Gitlab 并使用自定义的http端口
    Vue学习笔记(二):使用Axios进行跨域请求
    Vue学习笔记(一):引入Bootstrap和jQuery
    C# / .NET Core 调用javascript方法(适用于Windows/Linux平台)
    Centos7.7安装bcm43142(博通)无线网卡驱动
  • 原文地址:https://www.cnblogs.com/kwliu/p/2195908.html
Copyright © 2011-2022 走看看