码迷,mamicode.com
首页 > 其他好文 > 详细

DXUT源码阅读笔记

时间:2015-07-28 06:40:23      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

 

 

1.GetSet方法的宏定义简便写法

//DXUT.cpp_Line50
#define SET_ACCESSOR( x, y )       inline void Set##y( x t )   { DXUTLock l; m_state.m_##y = t; };
#define GET_ACCESSOR( x, y )       inline x Get##y()           { DXUTLock l; return m_state.m_##y; };
#define GET_SET_ACCESSOR( x, y )   SET_ACCESSOR( x, y ) GET_ACCESSOR( x, y )

 

使用时将x替换为形参,y替换为类中某个变量的后缀(例: m_state.m_D3D的后缀为D3D)

//example
GET_SET_ACCESSOR( IDirect3D9*, D3D9 );

  

 

注释

1. #define中的 "##"

##是一个连接符号,用于把参数连在一起 #是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串

#define paster( n ) printf( "token " #n" = %d\n ", token##n )

所以paster(9);就是相当于 printf("token 9 = %d\n",token9);

 

2.DXUTLock l;

//DXUT.cpp_Line32
class DXUTLock
{
public:
    inline  DXUTLock()
    {
        if( g_bThreadSafe ) EnterCriticalSection( &g_cs );
    }
    inline  ~DXUTLock()
    {
        if( g_bThreadSafe ) LeaveCriticalSection( &g_cs );
    }
};

不了解线程安全方面的东西,看百度百科大概了解了一下

EnterCriticalSection()

多个线程操作相同的数据时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这样就需要使用EnterCriticalSection和LeaveCriticalSection函数。

 

 

2.指针、com接口安全释放 宏定义

 

//DXUT.h_Line117
#ifndef SAFE_DELETE
#define SAFE_DELETE(p)       { if (p) { delete (p);     (p)=NULL; } }
#endif    
#ifndef SAFE_DELETE_ARRAY
#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p);   (p)=NULL; } }
#endif    
#ifndef SAFE_RELEASE
#define SAFE_RELEASE(p)      { if (p) { (p)->Release(); (p)=NULL; } }
#endif

注意动态数组的释放(SAFE_DELETE_ARRAY) 比较特别,当释放一个指向数组的指针时,空方括号是必需的。它指示编译器此指针指向一个对象数组的第一个元素。

                                                 ——C++Primer 5th  P425, 释放动态数组

 

DXUT源码阅读笔记

标签:

原文地址:http://www.cnblogs.com/Agravity/p/4681700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!