• 《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++的自动析构在编程中的应用

  • 相关阅读:
    pycharm中快捷键的使用
    Python中用format函数格式化字符串的用法
    Python eval()函数的用法
    python中的字符数字之间的转换函数
    python_控制台输出带颜色的文字方法
    Alpha通道是什么意思,和rgb通道有什么区别
    转载-【深度学习】深入理解Batch Normalization批标准化
    深度卷积网络-Inception系列
    微调Inception V3网络-对Satellite分类
    h5模型文件转换成pb模型文件
  • 原文地址:https://www.cnblogs.com/kwliu/p/2195908.html
Copyright © 2020-2023  润新知