- 博客(16)
- 资源 (10)
- 收藏
- 关注
转载 InterlockedIncrement函数详解
InterLockedIncrement and InterLockedDecrement实现数的原子性加减。什么是原子性的加减呢?举个例子:如果一个变量 Long value =0;首先说一下正常情况下的加减操作:value+=1;1:系统从Value的空间取出值,并动态生成一个空间来存储取出来的值;2:将取出来的值和1作加法,并且将和放回Value的空间
2013-04-28 10:12:00 901
转载 MFC VC++下ADO方式访问连接MySQL数据库 添加 删除 修改数据库
这都是以前为了做那个项目测试ADO连接MySQL数据功能的,这里发文分享一下。实际运行如下图所示,具有列表显示数据库内容,添加,删除,修改功能,点击列表框的任一栏就可以就行修改或者删除,功能算是有点小全面吧。我们可以从MySQL自带的MySQL workbench看看源数据库里的数据,如图所示。如果没有接触过的可以尝试一下在这里建立数据库,添加删除数据等,操作成功后我们再用VC
2013-04-18 09:46:09 1530
原创 MFC自动生成代码详解(一)
首先声明这篇博客是给MFC刚刚上路的coder准备的,老鸟们就自觉无视我吧!大家有没有感觉,创建MFC工程时他总会生成一大堆文件一大堆代码。虽然给我们带来了便利,但是调试的时候碰到这些代码总是畏首畏脚的,从来不敢动他们。这篇博客就来帮大家解决这个问题。让你在熟悉他们的作用同时,真正的不怕他们!现在我见了一个工程名字为Example他会生成以上几个文件我们就从从Examp
2013-04-12 20:57:51 3548 1
转载 stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编
sstdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。 为避免这种浪费,AppWizard和Vi
2013-04-12 11:38:53 937
转载 宽字节与单字节的转换 Unicode字符集下CString与char *转换
在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非常简单实用的各类字符操作和函数在VS2005环境下运行时会报各种各样的错误,这里总结了在Visual C++.NET2005环境中Unicode字符集下CString和char *之
2013-04-12 10:27:27 744
转载 一个进程的诞生与死亡
执行一个程序,必然就产生一个进程(process)。最直接的程序执行方式就是在shell (如Win95 的文件总管或Windows 3.x 的文件管理员)中以鼠标双击某一个可执行文件图标(假设其为App.exe),执行起来的App 进程其实是shell 调用CreateProcess 激活的。让我们看看整个流程:1. shell 调用CreateProcess 激活App.exe
2013-04-11 17:46:38 547
转载 GetMessage与PeekMessage区别
它们都是到消息队列中抓消息,如果抓不到,程序的主执行线程(primary thread,是一个UI 执行线程)会被操作系统虚悬住。当操作系统再次回来照顾此一执行线程,而发现消息队列中仍然是空的,这时候两个API函数的行为就有不同了: GetMessage 会过门不入,于是操作系统再去照顾其它人。 PeekMessage 会取回控制权,使程序得以执行一段时间。于是上述消息循环
2013-04-11 17:08:51 610
转载 程序的来龙去脉
来龙去脉总整理前面各节的目的就是如何将表面上看来不知所以然的MFC 程序对映到我们在SDK 程序设计中学习到的消息流动观念,从而清楚地掌握MFC 程序的诞生与死亡。让我对MFC程序的来龙去脉再做一次总整理。程序的诞生:■ Application object 产生,内存于是获得配置,初值亦设立了。■ Afx WinMain 执行AfxWinInit,后者又调用AfxInit
2013-04-10 10:20:10 585
转载 Dll学习笔记
比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的EX
2013-04-08 13:34:24 946
转载 socket通信浅解
socketsocket()我们使用系统调用socket()来获得文件描述符:#include#includeint socket(int domain,int type,int protocol);第一个参数domain设置为“AF_INET”。第二个参数是套接口的类型:SOCK_STREAM或SOCK_DGRAM。第三个参
2013-04-08 10:14:10 573
转载 CallBack()回调函数详解
回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让A作出相应反应。 那么我们
2013-04-03 10:01:48 2293
转载 setTimer()函数详解
转自:http://blog.csdn.net/ellor/article/details/1714741Timer事件,即定时器事件,是在游戏编程中,经常使用的一个事件。借助它可以产生定时执行动作的效果。这篇文章,就和大家一起探讨一下如何使用SetTimer()函数。 1、SetTimer定义在那里? SetTimer表示的是定义
2013-04-03 09:07:47 3757
转载 Event事件对象
事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。您可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。 产生事件对象的函数如下:CreateEvent proto lpEventAttributes:DWORD,\ bManualRese
2013-04-02 09:06:59 855
转载 线程间的通信实例
(一)实验目的: 学习线程间的通信(二)线程间的通信: 在一个多线程的应用程序中,所有线程共享进程资源,协同工作。所以,线程之间的通信是编写多线程应用的必不可少的环节。 线程之间的通信包括互斥、同步等,它是多线程设计中最难控制的部分,也是关键部分。1、线程间的互斥 (1) 临界区 在一个多线程的应用程序中,可能存在这样的危险:一个线程以某种
2013-04-01 19:17:52 641
转载 WaitForSingleObject函数
一下子跳到等待函数 WaitForSingleObject, 是因为下面的 Mutex、Semaphore、Event、WaitableTimer 等同步手段都要使用这个函数; 不过等待函数可不止 WaitForSingleObject 它一个, 但它最简单.function WaitForSingleObject( hHandle: THandle; {要等待的对象句柄}
2013-04-01 16:00:21 714
转载 svn符号各含义
黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人的修改。要解决冲突,如果你确认你的修改是无效的,则用TSVN还原你的修改就行了;如果认为你的修改是正确的,别人的提交是无效的,那么用TSVN先标记为“解决冲突”,然后就可以提交了;如果你认为你的修
2013-04-01 10:12:35 662
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人