代码改变世界

随笔档案-2013年04月

boost共享锁

2013-04-30 14:07 by 鉴于, 1185 阅读, 收藏,
摘要: C++ 自带的临界区、Mutex等只支持唯一锁,这对性能是有很大影响的。Boost提供共享锁功能,能够对读写区分加锁。在系统性能优化时,是一个需要考虑的问题。 // 头文件 #include <boost/thread/shared_mutex.hpp> #include <boost/thread.hpp> typedef boost::shared_mutex Lock; typedef boost::unique_lock<Lock> WriteLock; typedef boost::shared_lock<Lock> ReadLock; 阅读全文

static_assert

2013-04-30 11:56 by 鉴于, 226 阅读, 收藏,
摘要: vs2010提供了static_cast来判断常量表达式是否为true比ASSERT多了提示信息的设置如:static_assert(MsgID > j, "msg id must > USER_ID_MIN"); 阅读全文

[MFC][DShow]简单例子

2013-04-25 23:08 by 鉴于, 626 阅读, 收藏,
摘要: DirectShow是微软提供的视频播放SDK,本文介绍了如果在MFC应用程序中使用[DShow]来播放视频 #include <DShow.h> // DirectShow头文件 需要在工程里面添加该头文件,然后定义个4个指针。 IGraphBuilder* m_pGraphBuilder; IMediaControl* m_pMediaC... 阅读全文

EndDialog(IDOK)之后需要return

2013-04-25 21:59 by 鉴于, 1210 阅读, 收藏,
摘要: 模态对话框常用EndDialog函数来让对话框返回,同时能传递给调用窗体一个返回值,EndDialog是通过调用CWnd的 EndModalLoop(int nResult)来通知窗体返回的。在void CWnd::EndModalLoop(int nResult)函数中会发送一个异步消息PostMessage(WM_NULL),也就是说EndDialog是异步的,所以如果在类似下面的代... 阅读全文

[boost] boost::lexical_cast类型转换

2013-04-17 21:57 by 鉴于, 476 阅读, 收藏,
摘要: boost是一个开源的c++开发库,提供了一些通用库用来弥补c++标准库的不足。boost::lexical_cast是一个类型转换库,可用于不同类型之间的转换,字符串、整型数等。具体使用例子如下:#include <iostream> #include <boost/lexical_cast.hpp>int main(int argc, char* argv[]) { std::string strNum = "1.0"; float num = boost::lexical_cast<float>(strNum); // 从std:: 阅读全文

Boost 开发例子

2013-04-16 23:40 by 鉴于, 194 阅读, 收藏,
摘要: http://programmingexamples.net/wiki/Boost 阅读全文

[MFC]两个GetCurrentTime()的区别

2013-04-16 23:06 by 鉴于, 5606 阅读, 收藏,
摘要: 在MFC下做开发,有时需要记录当前系统时间,使用CTime保存时间,用函数GetCurrentTime()来获取时间是个办法。但是在MFC中有2个GetCurrentTime函数,一不留神就容易混淆。CTime currentTime = GetCurrentTime(); CTime currentTime2 = CTime::GetCurrentTime();GetCurrentTime()在文件winbase.h中,实际执行的是GetTickCount(),这是Windows API,用来返回从系统开机到现在间隔的毫秒数,超过49天之后,将会溢出。winbase.h中对该函数宏定义如下, 阅读全文

[GUI开发]界面繁忙的处理

2013-04-16 22:11 by 鉴于, 410 阅读, 收藏,
摘要: 当主线程需要进行耗时操作时,我们需要告知用户程序正在运行,需要用户耐心等待。这时可在按钮相应事件里添加 CWaitCursor curWait; 该语句将会定义个CWaitCursor对象,在构造函数里会将光标设置为等待状态,在退出该作用域时会调用析构函数将恢复光标状态。CWaitCursor 定义在afxwin2.inl文件中_AFXWIN_INLINE CWaitCursor::CWaitCursor() { AfxGetApp()->BeginWaitCursor(); } _AFXWIN_INLINE CWaitCursor::~CWaitCursor() { AFX_BEGIN 阅读全文

warning C4800: “BOOL”: 将值强制为布尔值“true”或“false”(性能警告)

2013-04-16 21:56 by 鉴于, 4185 阅读, 收藏,
摘要: 在MFC程序中混用BOOL和bool,编译时产生警告信息warning C4800: “BOOL”: 将值强制为布尔值“true”或“false”(性能警告)查看了对应的汇编文件,用的都是mov、cmp、setne这些不太耗时的指令。有些告警信息不用太在意。bool a = false;00C72F33 mov byte ptr [a],0 BOOL b = a;00C72F37 movzx eax,byte ptr [a] 00C72F3B mov dword ptr [b],eax bool c = b;00C72F3E cmp dword ptr [b],0 00C72F42 setne 阅读全文

Visual studio2008编译后事件

2013-04-16 21:30 by 鉴于, 241 阅读, 收藏,
摘要: vs开发工具编译后需要将依赖的库文件和其他文件拷贝到指定目录下,但是拷贝时会将文件名都给输出,这样反而影响查看VS输出的警告信息。改用>>NUL 提示编译器不用将命令执行结果输出就OK了xcopy "$(ProjectDir)Images\*" "$(TargetDir)" /Y/I/E >> NUL应该为这个 阅读全文