
CC++
文章平均质量分 62
Qsir
这个作者很懒,什么都没留下…
展开
-
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和转载 2017-05-26 14:31:53 · 345 阅读 · 0 评论 -
定义c/c++全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在ide开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(link error) 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌入式下做开发工作的话,那么你转载 2017-05-26 14:36:09 · 311 阅读 · 0 评论 -
基于C++全局变量的声明与定义的详解
(1)编译单元(模块)在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。那么,错误可能在两个地方产生:一个,编译时的错误,这个主要是语法错误;一个,链接时的错误,主要是重复定义变量等。编译单元指在编译阶段生成的转载 2017-05-26 18:35:43 · 389 阅读 · 0 评论 -
Windows下C/C++获取当前系统时间
Windows下CC获取当前系统时间方案一localtime优点仅使用C标准库缺点只能精确到秒级方案二GetLocalTime sys 优点能精确到毫秒级缺点使用了windows API 方案三systemtime方案四timenull方案五CTime如何在C中将filetime时间转化为字符串filetimeSYSTEMTIME st char strTime128s转载 2017-05-31 12:19:30 · 8766 阅读 · 0 评论 -
如何在C++中将filetime时间转化为字符串?
先将filetime转化为systemtime再SYSTEMTIME st; char strTime[128];sprintf(strTime,"%d-%d-%d %d:%d:%d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); 注释1:对于SYSTEMTIME的显示也可以使用m转载 2017-05-31 12:21:21 · 1711 阅读 · 0 评论 -
Windows API的时间结构体、时间转换及时间获取
Windows API的时间结构体、时间转换及时间获取 时间格式:DosDateTime FileTime SystemTime | | |使用上面转载 2017-05-31 12:22:42 · 1923 阅读 · 0 评论 -
Win32时间类型FILETIME/SYSTEMTIME/WINDOWSTIME(FILETIME这个名字很奇怪,其实他跟FILE并没有直接关系,只是很多File的API中,都以这个为时间的类型)
Win32的时间类型在Win32时间类型有这样几种类型FILETIME/SYSTEMTIME/WINDOWSTIME先提个问题,如何计算当前时间100天以后的时间,在win32中。1.SYSTEMTIME SYSTEMTIME的定义是这样typedef struct _SYSTEMTIME { WORD wYear; WORD转载 2017-05-31 12:24:02 · 845 阅读 · 0 评论 -
Windows中的时间(SYSTEMTIME和FILETIME)
上一篇中介绍了C运行库中的时间处理函数。这一篇介绍Windows SDk中提供的时间函数。两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC实现),同样提供本地时间和UTC时间之间的转换。不过CRT中的tm时间在SDK中对应为系统时间(SYSTEMTIME),CRT中的time_t时间在SDK中对应的为文件时间(FILETIME),那个"特殊时刻"也变成1转载 2017-05-31 12:26:03 · 1233 阅读 · 0 评论 -
CRT中的时间(time_t和tm)
时间处理时实际项目中经常碰到的问题,这里介绍最常用的时间处理函数。 首先介绍基本的时间概念。时间一般分为两种,一种是本地时间(Local Time),一种是协调世界时间(Coordinated Universal Time ,UTC),也就是传说中的格林威治时间。本地时间与UTC时间之间的差即为时差,比如,北京时间(东八区)比UTC时间晚8个小时。 C运行库中处理时间的函数主要转载 2017-05-31 13:35:52 · 792 阅读 · 0 评论 -
Windows 各种计时函数总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在Windows系统,也可以用于Linux系统。在Windows系统下三种,使用Windows提供的API接口timeGetTime()、GetTickCount()及QueryPerf转载 2017-05-31 14:43:53 · 579 阅读 · 0 评论 -
Windows系统时间(FILETIME和SYSTEMTIME)
前面的《Windows各种计时函数总结》介绍了Windows系统常用的5种计时函数——标准C/C++下的time()及clock(),在Windows系统下的API接口timeGetTime()、GetTickCount()及QueryPerformanceCounter()。下面来介绍下Windows系统中表示时间的两个结构体——FILETIME和SYSTEMTIME及相关函数。 先转载 2017-05-31 14:45:26 · 7487 阅读 · 0 评论 -
【转】[C++]LARGE_INTEGER 类型使用
这里解释前面碰到的LARGE_INTEGER结构。与可能的误解不同,64位数据并非要在64位操作系统下才能使用。在VC中,64位数据的类型为__int64。定义写法如下: __int64 file_offset; 上面之所以定义的变量名为file_offset,是因为文件中的偏移量是一种常见的要使用64位数据的情况。同时,文件的大小也是如此(回忆上一转载 2017-06-01 13:06:01 · 7292 阅读 · 0 评论 -
通过FILETIME得到时间
FILETIME结构:#ifndef _FILETIME_#define _FILETIME_typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime;} FILETIME, *PFILETIME, *LPFILETIME;#endifULARGE_INTEGER结构转载 2017-06-01 13:09:04 · 2955 阅读 · 0 评论 -
日志库EasyLogging++学习系列(1)—— 简要介绍
对于有开发经验的程序员来说,记录程序执行日志是一件必不可少的事情。通过查看和分析日志信息,不仅可以有效地帮助我们调试程序,而且当程序正式发布运行之后,更是可以帮助我们快速、准确地定位问题。在现在这个开源的年代,并不需要我们自己去写一套日志库,开源的版本已经有很多了。然而遗憾的是,在目前开源的C++日志库中,并没有一个在使用份额上占绝对优势的,我自己之前用过log4cplus和glog,这两个库都比转载 2017-06-16 16:42:34 · 940 阅读 · 0 评论 -
日志库EasyLogging++学习系列(2)—— 日志级别
在很多的C++日志库中,日志信息会根据严重性来划分级别,使用者可以设置严重性级别门阀值来控制日志的输出,即严重性级别在该门阀值以上的日志信息才进行记录。以此不同,在Easylogging++日志库中,故意默认采用了不划分级别的日志记录,以便使用者可以完全自主地启用或者禁止某个级别的日志记录。不过实际上,Easylogging++同样也支持划分级别的日志记录,只是需要额外设置一个标记:Logging转载 2017-06-16 16:44:13 · 1886 阅读 · 1 评论 -
日志库EasyLogging++学习系列(3)—— 配置功能
在前面的文章 《日志库Easylogging++学习系列(1) —— 简要介绍 》中,我们已经初步见识到了 Easylogging++ 日志库强大的配置功能。那么配置文件中各个字段的意义是什么呢?我们应该如何编写自己的配置文件呢?又或者说,除了配置文件之外,我们还有没有别的方法可以完成日志的配置功能呢?希望各位有疑惑的小伙伴在看了本文的内容之后,都能够找到自己满意的答案!要转载 2017-06-16 16:45:53 · 3614 阅读 · 1 评论 -
日志库EasyLogging++学习系列(4)—— 格式说明符
在上一篇文章中,主要记录了如何使用 Easylogging++ 的配置功能,虽然已经用了很大的篇幅尽可能详细地加以记录,不过相信有些细心的小伙伴可能已经发现遗漏了些什么,请看下面两句摘自 my_log.conf 配置文件的语句:[cpp] view plain copyprint?FORMAT = "[%level | %dat转载 2017-06-16 16:47:12 · 1634 阅读 · 0 评论 -
日志库EasyLogging++学习系列(5)—— 辅助配置功能
正如前面《日志库EasyLogging++学习系列(3)—— 配置功能》文中最后提到的,在某些应用场景下,我们还需要通过其他的一些配置手段来辅助我们完成某些特殊功能,这些辅助配置手段包括设置命令行参数、设置日志标记、配置宏定义。本文中就对这几个辅助配置功能逐一进行简要介绍。命令行参数在 Easylogging++ 中可以通过START_EASYLOGGINGPP(argc,转载 2017-06-16 16:48:28 · 1625 阅读 · 0 评论 -
日志库EasyLogging++学习系列(6)—— 日志记录器
所有的日志都是由日志记录器完成的,日志记录器使用唯一的 ID(大小写敏感)来标识。在 Easylogging++ 中默认了三个现有的日志记录器:默认日志记录器,其 ID 为:default性能日志记录器,其 ID 为:performance系统日志记录器,其 ID 为:syslog,需要定义宏 ELPP_SYSLOG ,否则不存在注册日志记录转载 2017-06-16 16:49:37 · 853 阅读 · 0 评论 -
日志库EasyLogging++学习系列(7)—— 记录方式详解
在前面所列文章的演示代码中,其实已经展示了一部分记录日志的方式。为了使用方便,在 Easylogging++ 中,通过使用宏的集合来完成日志记录。普通日志记录对于普通的日志记录,我们可以选择以下两种比较常用的方式:LOG(LEVEL)CLOG(LEVEL, logger ID)两个宏定义的中 LEVEL 请参看《日志库EasyLogging++学习系列(2)转载 2017-06-16 16:51:12 · 1393 阅读 · 0 评论 -
日志库EasyLogging++学习系列(8)—— Verbose日志详解
这里之所以把Verbose日志单独拿出来讲,是因为最初接触 Easylogging++ 的时候,对Verbose级别的日志感到有点迷惑,并不是十分清楚其用法。不过后来发现,在不扩展日志级别的情况下,其实Verbose日志可以让我们更轻松地记录更多更详细的信息,特别是在排错的日志记录中,没有哪个级别的日志比使用Verbose级别的日志更为合适了。正如如前面文章提到的一样,Verbose日转载 2017-06-16 16:52:24 · 1212 阅读 · 0 评论 -
日志库EasyLogging++学习系列(9)—— 性能跟踪功能
性能跟踪是 Easylogging++ 其中一个非常显著的功能,而且使用起来也十分简单。如果在Windows平台下使用性能跟踪的话,其原理是基于 Windows API函数 GetSystemTimeAsFileTime 实现的。关于API函数 GetSystemTimeAsFileTime 的精度讨论,网上众说纷纭,根据我自己的经验,个人认为在毫秒级的话,这个函数还是可以用的,其精准度和 S转载 2017-06-16 16:53:26 · 1010 阅读 · 0 评论 -
日志库EasyLogging++学习系列(10)—— 日志文件滚动
在很多应用场合,我们是需要实现日志文件滚动的,特别是在一些长期运行的服务器程序中,如果把所有的日志都记录在一个文件之中,势必会造成日志文件越来越大。当日志内容很多的时候,万一哪天突然需要查询某个日志信息就会显得十分不便。所以,支持日志文件滚动是很多日志库都支持的功能,而文件滚动又可以分为按大小滚动和按时间滚动。按大小滚动文件在 Easylogging++ 中,已经实现了转载 2017-06-16 16:54:33 · 1760 阅读 · 0 评论 -
日志库EasyLogging++学习系列(11)—— 共享日志库
在前面的学习系列文章中,我们都是在单独的一个应用程序中使用 Easylogging++ 日志库。其实 Easylogging++ 日志库是可以共享给动态库、静态库以及应用程序共同使用的。在编写一些大型程序的时候,我们往往会把各个功能分别封装成一个动态库,然后再编写一个主程序来负责调用这些动态库就可以了。现在假设我们想在主程序和各个动态库中都使用 Easylogging++ 来记录日志,那么我们需要转载 2017-06-16 16:56:38 · 1715 阅读 · 1 评论 -
const的用法,特别是用在函数前面与后面的区别!
const的用法,特别是用在函数后面在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 this所指向的对象,也不能改变 this所保存的地址。 关键字:Const,Const函数,Const变转载 2017-07-12 14:50:30 · 428 阅读 · 0 评论 -
读写配置文件(.ini)
在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:一.将信息写入.INI文件中.1.所用的WINAPI函数原型为:BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpStrin转载 2017-07-04 15:08:38 · 490 阅读 · 0 评论 -
另一种判断文件存在的方法--_access和_waccess
_access, _waccessDetermine file-access permission.int _access( const char *path, int mode );int _waccess( const wchar_t *path, intmode );RoutineRequired HeaderOptional HeadersC转载 2017-07-05 10:14:12 · 692 阅读 · 0 评论 -
Sleep函数
简介:函数名: sleep功 能: 执行挂起一段时间用 法: unsigned sleep(unsigned milliseconds);在VC中使用带上头文件#include 在gcc编译器中,使用的头文件因gcc版本的不同而不同#include 注意:在VC中Sleep中的第一个英文字符为大写的"S"在标准C中是sleep, 不要大写.. 下面使用大写转载 2017-07-05 10:16:17 · 881 阅读 · 0 评论 -
C++标准转换运算符reinterpret_cast
reinterpret_cast (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了reinterpret_cast的字面意思:重新解释(类型的比特转载 2017-07-05 10:17:45 · 305 阅读 · 0 评论 -
static_cast、dynamic_cast、const_cast和reinterpret_cast总结
前言这篇文章总结的是C++中的类型转换,这些小的知识点,有的时候,自己不是很注意,但是在实际开发中确实经常使用的。俗话说的好,不懂自己写的代码的程序员,不是好的程序员;如果一个程序员对于自己写的代码都不懂,只是知道一昧的的去使用,终有一天,你会迷失你自己的。C++中的类型转换分为两种:隐式类型转换;显式类型转换。而对于隐式变换,就是标准的转换,在很多时候,不经意间就发生了,比如转载 2017-07-05 10:21:01 · 263 阅读 · 0 评论 -
Dynamic/Static/Reinterpret/Const and Volatile Cast (English)
Const and Volatile CastThe expression const_cast(v) can be used to change the "const" or "volatile" qualifiers of pointers or references.T must be a pointer, reference, or pointer to member type转载 2017-07-05 10:28:40 · 444 阅读 · 0 评论 -
C++ reinterpret_cast,const_cast等 显式类型转换总结
C++代码 #include int main(void) { //reinterpret_cast //将一个类型指针转换为另一个类型指针,这种在转换不修改指针变量值数据存放格式 //只需在编译时重新解释指针的类型,他可以将指针转化为一个整型数但不能用于非指针的转换 double d=9.3; double* pd =转载 2017-07-05 10:30:20 · 712 阅读 · 0 评论 -
Win32串行通信中文版(Serial Communications In Win32)
目录(?)[+]综述引言打开串口读和写非重叠IO重叠IO读写串行状态通信事件告诫错误处理和通信状态调制解调器状态又名线状态扩展功能串行设置DCB设置流控制硬件流控制软件流控制通信超时小结参考文献 可到http://download.youkuaiyun.com/detail/zcube/5079651下载排版好的PDF版本。 原翻译 2017-07-06 11:49:38 · 960 阅读 · 0 评论 -
strtok、strtok_s、strtok_r 字符串分割函数
1、strtok函数函数原型:char * strtok (char *str, const char * delimiters);参数:str,待分割的字符串(c-string);delimiters,分割符字符串。该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现转载 2017-07-06 16:55:40 · 638 阅读 · 0 评论 -
在串口通信开发中实现自动查找串口端口的方法
开发工具:visual studio 2010本机可用串口信息如下:1 、查询注册表 查询注册表的方法是比较常见的方法,通过查看“ HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM ”项来获取串口信息。该方法就是使用编程方法读取注册表内信息,相当于用户通过在运行框内输入 ”regedit” (或 regedit32 )直接打开注册表。转载 2017-07-07 14:27:43 · 1109 阅读 · 0 评论 -
串口编程-枚举遍历串口、获取PC所有串口名称、遍历注册表项、RegEnumValue用法
在网上找了几个关于遍历串口的例子,要么代码不完整,要么就有Bug,如读不了串口号大于10以上的。 经过本人的整理,现分享最终代码,vs2008下编译通过。 //此方法同样适用于遍历windows开机启动项,只需稍加修改即可. ?1234567891011121314151617转载 2017-07-07 14:29:53 · 4483 阅读 · 1 评论 -
CreateThread
CreateThread是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程。线程中止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关闭该线程对象。在很多参考书上,都说不要用CreateThread 创建线程、并用CloseHandle来关闭这个线程,因为这样做会导致内存泄漏,而应该用_beginthread来创建线程,_e转载 2017-07-21 10:10:40 · 722 阅读 · 0 评论 -
多线程CreateThread函数的用法及注意事项
当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤: 1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回 2把线程退出码置为STILL_ACTIVE,把线程挂起计数置1 3分配context结构 4分配两页的物理存储以准备栈,保护页设置为PAGE_REA转载 2017-07-21 10:12:20 · 466 阅读 · 0 评论 -
多线程编程之一——问题提出
一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnSleepSixSecond() {Sleep(6000); /转载 2017-07-21 10:17:44 · 302 阅读 · 0 评论 -
标签页式样的对话框参考
http://blog.youkuaiyun.com/akof1314/article/details/5979405Visual Studio 2008 SP1自带的示例里面,有个工程为PropSheetDemo,此示例介绍了CMFCPropertySheet属性表的使用,截图如下:http://img.blog.youkuaiyun.com/20141112163539593?watermark/2/text/a转载 2017-07-18 10:36:15 · 521 阅读 · 0 评论