c/c++编程
文章平均质量分 68
dawnstar_hoo
这个作者很懒,什么都没留下…
展开
-
Critical Section,Mutex,Semaphore,Event区别
临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进 入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共 享资源的目的。 临界区包含两个转载 2009-12-25 17:36:00 · 740 阅读 · 0 评论 -
你真的了解EOF和feof吗?
判断文件结束有两种方法:EOF和feof()查看stdio.h可以看到如下定义:#define EOF (-1)#define _IOEOF 0x0010 #define feof(_stream) ((_stream)->_flag & _IOEOF)由此可以看出,这两种方式的原理是不同的。有人说EOF只能用于文本文件,其实不然,还要看定义的变量的类型。下面这段程转载 2009-10-10 13:59:00 · 991 阅读 · 0 评论 -
MFC消息循环
首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵WinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送转载 2009-09-18 10:47:00 · 796 阅读 · 0 评论 -
AfxBeginThread和CreateThread具体区别
具体说来,CreateThread这个 函数是windows提供给用户的API函数,是SDK的标准形式,在使用的过程中要考虑到进程的同步与互斥的关系,进程间的同步互斥等一系列会导致操作系统死锁的因素,用起来比较繁琐一些,初学的人在用到的时候可能会产生不可预料的错误,建议多使用AfxBeginThread,是编译器对原来的CreateThread函数的封装,用与MFC编程(转载 2009-09-18 10:25:00 · 777 阅读 · 0 评论 -
VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用
一、 在字符串前加一个L作用: 如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。 strlen("asd") = 3; strlen(L"asd") = 6; 二、 _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的转载 2009-09-18 10:49:00 · 512 阅读 · 0 评论 -
在VC下使用标准的socket函数编程的步骤
在VC下使用标准的socket函数编程的步骤 socket是一种在Linux或者Unix下非常流行的网络编程方式,这种方式简单有效,可以很灵活的完成各种复杂的协议控制,个人感觉比使用MFC下的网络相关类库要来的更舒服一些,因为所有一切都是自己可控的。但是使用socket编程有一个非常不方便的地方在于,由于在Linux下没有一个像VC这样强大的调试平台,网络通信过程中的转载 2009-09-18 10:46:00 · 1258 阅读 · 0 评论 -
关于mfc下多线程socket出错
问?: 我用CSocket写通信程序,但执行到下面的函数时总出错,是什么原因?是多线程通信,每个线程创建了一个套接字:CMySocket *m_pClientSocket = New CMySocket;然后在OnSendSocket函数中调用:m_pClientSocket->Send(str,len);如果消息很少,或者中间有Sleep,则没有错误,否则必然出现ASSE原创 2009-09-10 15:25:00 · 3722 阅读 · 2 评论 -
关于dll调用
不想说那么多了,希望下次不会再出这个错!调用DLL函数,出现错误Run-Time Check Failure#0 - The value of ESP was not properly saved across a function call.This is usually a result of calling a function declared with onecall转载 2009-09-10 14:00:00 · 709 阅读 · 0 评论 -
关于vs 2008字符集问题
visual studio 建立的c/c++工程,默认字符集是unicode,此时一些底层api会出问题,例如如下片段: #ifdef UNICODE#define GetPrivateProfileString GetPrivateProfileStringW#else#define GetPrivateProfileString GetPrivateProfileS原创 2009-06-27 11:22:00 · 2621 阅读 · 0 评论 -
Winsock Select模型范例
服务器端:#include #include void InitSocket(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData );转载 2009-11-24 20:06:00 · 824 阅读 · 0 评论 -
三种常规异步WinSock I/O模型
1.基于事件套接字集合的select模型select(选择)模型是Winsock中最常见的I/O模型。之所以称其为“select模型”,是由于它的“中心思想”便是利用select函数,实现对I/O的管理!最初设计该模型时,主要面向的是某些使用Unix操作系统的计算机,它们采用的是Berkeley套接字方案。select模型已转载 2009-11-24 20:19:00 · 934 阅读 · 0 评论 -
Winsock异步模型之二(WSAEventSelect)
目录: 一、WinSock I/O模型分析 1.WSAAsuncSelect模型 2.WSAEventSelect模型 3.重叠(Overlapped)I/O模型 二、聊天软件的设计与分析 1.程序功能 2.程序设计 3.实现是的关键点 三、体会 四、源代码一、WinSock I/O模型分析Winsock提供了五种套接字I/O模型来解决这些转载 2009-11-24 20:13:00 · 1886 阅读 · 0 评论 -
c++ 虚函数的实现机制:笔记
1、c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public: virtual void f(); virtual void g();pri转载 2010-02-26 18:06:00 · 415 阅读 · 0 评论 -
STL简介
一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类:alg转载 2010-03-01 00:04:00 · 551 阅读 · 0 评论 -
const用法详解
面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误转载 2010-02-28 11:09:00 · 581 阅读 · 0 评论 -
可变参数的宏定义
引言:在c/c++程序设计中,经常采用printf来调试程序,但是在要发布程序时不得不从代码中删掉那些多余的printf语句,这是一项繁琐的工作。由此想到可变参数的宏,引文介绍了如何定义可变参数的宏,以及在不同C标准和不同编译器中的差别。 ----------Rube-----------------------------------转载 2009-12-15 17:16:00 · 821 阅读 · 0 评论 -
一些有用的转换
Relation with Conversion1. WCHAR / TCHAR:WideCharToMultiByte()wcstombs()CString()ATL macros: OLE2A(),W2T(),W2CT(),lstrcpy() NOTE: #include swprintf(wchar,L"%LS",char); wc转载 2009-12-11 09:31:00 · 623 阅读 · 0 评论 -
__cdecl __fastcall与 __stdcall 调用约定
__cdecl __fastcall与 __stdcall 调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。 1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回转载 2009-12-09 10:40:00 · 432 阅读 · 0 评论 -
链接错误LNK2001
习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于 编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时, 编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不 明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非 常困难。 初学者在学习VC++的转载 2009-12-09 14:23:00 · 467 阅读 · 0 评论 -
c语言 宏
C标准中指定了一些预定义的宏,对于编程经常会用到。下面这个表中就是一些常常用到的预定义宏。 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __FILE__ 代表当前源代码文件名的字符串文字 __LINE__ 代表当前源代码中的行号的整数常量 __TIME__原创 2009-06-27 18:36:00 · 540 阅读 · 0 评论 -
C语言编写Windows服务程序
Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。最后,你可以用所学知识编写自己的 Windows 服务。 当初我写第一个NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇 Nigel转载 2009-06-24 15:58:00 · 716 阅读 · 0 评论 -
关于unicode
最近做了个项目,获得cpu占用率,动态引用ntdll.dll里的函数,编译环境:visual studio 2008,但是调试时发现在LoadLibrary函数返回的值无法解析,这样在GetProcAddress时返回null,郁闷了一下午,终于在一个老外的论坛上找到答案,如下: ask:Im using MS Visual Studio C++ 2008 Express. Iv原创 2009-06-26 16:47:00 · 661 阅读 · 0 评论 -
C++程序员必需的修养
我总结了在用C/C++语言(主要是C语言)进行程序写作上的三十二个“修养”,通过这些,你可以写出质量高的程序,同时也会让看你程序的人渍渍称道,那些看过你程序的人一定会说:“这个人的编程修养不错”。01、版权和版本02、缩进、空格、换行、空行、对齐03、程序注释04、函数的[in][out]参数05、对系统调用的返回进行判断06、if 语句对出错的处理07、转载 2009-04-02 15:41:00 · 360 阅读 · 0 评论 -
C字符串操作常见不良习惯
1.对同一字符串,多次调用strlen(). strlen()是一个很昂贵的操作,字符串越长越昂贵,所以应该只调用一次,如果下次要使用该值,则将其存到一个变量中. 2.大量使用 strcat() 每调用一次strcat(), 其内部调用strlen()一次,代价很高昂. 3.使用strncpy()拷贝字符串,并且n很大,实际的字符串经常很短如果源字符串长度转载 2009-04-02 15:19:00 · 426 阅读 · 0 评论 -
一个简单的UDP广播程序
一般使用的socket编程都是使用的是一些绑定端口和ip的普通的程序,一旦想要编写一些特殊的网络应用程序就会出现一些问题。就那这个UDP广播数据的车姑娘许来说,需要设置socket的选项,也就是使用setsockopt来设置socket的一些特殊选项。#include #include #include转载 2009-04-02 10:23:00 · 508 阅读 · 0 评论 -
10 行代码判定色*情*图片——Python
致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术贴!声明:本文因科学研究需要,包含部分色*情*图片,不可作为传播色*情*信息的证据。今天先是在 CSDN看到《大学生发明依据皮肤比例过滤色*情*图片软件》(http://news.csdn.net/n/20081028/120298.html),后来发现这条新闻竟然已经上了网易新闻频道了(http://news.转载 2009-04-02 15:34:00 · 1358 阅读 · 0 评论 -
linux中用C编写ping程序
找了许多个版本,有些不能编译有些不能用,最后在http://blog.csdn.net/shrekmu/archive/2007/02/06/1503709.aspx找到一个还可以的,稍稍修改,在uClinux中运行正常!它这段程序无main()的,要自己加上去,ping()的入口是字符串形式的IP地址以及一个毫秒为单位的超时值。如果编译不通过,可以把当中的syslog(LOG_IN转载 2009-04-02 10:30:00 · 1009 阅读 · 0 评论 -
如何获得正在接收数据的ip(多网卡)
//服务器段端 想获取对方正在和我的那个ip地址联系 int socket ; socket 是一个已经设置好的值 是正在使用的socket struct sockaddr sockadd; socklen_t len = sizeof(struct sockaddr_in); getsockname(socket, (struct s原创 2009-04-02 10:24:00 · 750 阅读 · 0 评论 -
linux 下获得本机(通用网卡)ip地址
源代码级Unix/Linux 通用网卡IP地址获取方法在Unix和Linux系统下有两种方法可以获得系统IP地址(gethostbyname和ioctl)gethostbyname通过域名解析获取对应计算机的网络地址,ioctl是一系列的网络函数获得本机的IP(推荐使用ioctl方法,这个方法能给出的ip与ifconfig命令显示的ip一致,并且能不经修改的在转载 2009-04-02 10:23:00 · 826 阅读 · 0 评论 -
sockaddr与sockaddr_in结构体详细讲解 二者区别
struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes of protocol address */};sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF转载 2009-04-02 10:21:00 · 457 阅读 · 0 评论 -
关于MFC的main函数
在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中,编译时会自动将该函数链接到可执行文件中。程序员可以重写WinMain函数,但一般不需要这么做。转载 2009-04-02 09:19:00 · 3589 阅读 · 1 评论 -
关于优先级
来来来,大家来看看这段代码:#define WHITESPACE " /t/n/r/f"#define DELIMS ", /t/n/r/f"#define COMMENTCHAR ##define CRLF "/r/n"#define EOS /0intg原创 2009-04-02 11:27:00 · 409 阅读 · 0 评论 -
设置串口通信参数
6.7.2 设置串口通信参数串口通信参数指的是波特率、数据位、奇偶校验位和停止位。对串口实现控制的时候同样要用到termio结构体。下面将结合具体的代码说明如何设置这些参数。1.波特率设置……2.数据位数据位指的是每字节中实际数据所占的比特数。要修改数据位可以通过修改termios结构体中c_cflag成员来实现。CS5、CS6、CS7和CS8分别表示数据位为5、6、转载 2009-04-02 15:42:00 · 6818 阅读 · 1 评论 -
NtQuerySystemInformation
Native API乃Windows用户模式中为上层Win32 API提供接口的本机系统服务。平常我们总是调用MS为我们提供的公用的Win32 API函数来实现来实现我们系统的功能。今天我们要谈的是如何通过本机系统服务(Native API)来探测本机系统信息。当然,微软没有为我们提供关于本机系统服务的文档 (Undocumented),也就是不会为对它的使用提供任何的保证,所以我们不提倡使用Na转载 2009-06-26 13:44:00 · 689 阅读 · 0 评论 -
__cdecl __fastcall与 __stdcall
Visual C++ Compiler Options可以指定的Calling Convention有 3种: /Gd /Gr /Gz 这三个参数决定了: 1.函数参数以何种顺序入栈,右到左还是左到右。 2.在函数运行完后,是调用函数还是被调用函数清理入栈的参数。 3.在编译时函数名字是如何转换的。 下面我们分别详细介绍: 1./Gd 这是编译器转载 2009-08-25 16:36:00 · 393 阅读 · 0 评论 -
CSocket超时(Time-Out)功能的设置及其局限性
CSocket 是一个同步的socket类,如“接收”(Receive)、“发送”(Send) 和“连接”(Connect) 均是阻塞操作,即要等到操作成功执行完毕或套接字上出现错误后,对这些函数的调用才有返回结果。如果连接不上,只有超时以后才能返回。在某些情况下,操作可能永远不能成功完成,这将导致程序无限循环等待操作完成。例如错误的域名解释,连接不上的IP地址,这回让用户等待近 40秒钟的时转载 2009-08-25 16:32:00 · 979 阅读 · 0 评论 -
函数WaitForMultipleObjects整理
函数WaitForMultipleObjects整理DWORD WaitForMultipleObjects( DWORD nCount, const HANDLE* lpHandles, BOOL bWaitAll, DWORD dwMilliseconds);其中参数nCount 句柄的数量 最大值为MAXIMUM_WAIT_OBJECTS(64)HAN转载 2009-08-25 16:33:00 · 839 阅读 · 0 评论 -
MFC下CSocket编程详解
MFC下CSocket编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket::Socket 初始化) CSocket::Socket初始化 CSocket::SetSockOpt 设置socket选项 CSocket::Bind 绑定地址转载 2009-08-25 10:40:00 · 644 阅读 · 0 评论 -
关于DLL
动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function)。 导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。 输出函数的方法有以下几种: 1、传统的方法 在模块定义文件的EXPORT部分指定要输入的函数或者转载 2009-08-13 10:08:00 · 540 阅读 · 0 评论 -
关于C++中posix pthread线程函数在类中封装的问题
我们通常有这样的需求:需要在C++中用多线程处理可以并行处理的问题,且把线程函数封装在类中,而把线程函数封装在类中,导致了this指针作为默认的参数被传进了函数中,从而和线程函数参数不能匹配,不能通过编译。市面上一般有以下几种解决方案:1. 将线程函数作为全局函数, 从而避免了this指针作为隐含参数的作怪行为,但这样线程函数却无法访问类中的私有变量,此为一大缺憾。转载 2009-08-12 16:00:00 · 1080 阅读 · 0 评论