- 博客(42)
- 资源 (5)
- 收藏
- 关注
转载 java mine block
package com.kent.gu.mine;import android.content.Context;import android.graphics.Color;import android.util.AttributeSet;import androi
2011-09-22 23:13:44
832
原创 c expert programming
1、 对无符号类型的建议 尽量不要再你的代码中使用无符号类型, 以免增加不必要的复杂性, 尤其是, 不要仅仅因为无符号数不存在负数(如 年龄, 国债)而用它来表示数量。 尽量使用像int那样的有符号类型, 这样在涉及升级混合类型的复杂细节时, 不必担心边界情况(如-1被翻译成为非常大的正数)。只有在使用位段和二进制掩码时,才可以用无符号数。 应该在表达式中使用强制类型转换, 是操作符均为有符号数或无符号数, 这样就不必由编译器来选择结果的类型。int array[] = {0, 1, 2, 3, 4
2011-05-11 16:27:00
212
原创 看过de一些程序
用一个递归来复制一个链表。typedef struct _user_info{ int id; char* point; char* name; struct _user_info* next;}user_info;user_info * duplicate_usr_info (const user_info * user_element, bool recursive){ user_info * dup_user = NULL; if (user_element !=
2011-04-27 09:12:00
205
转载 Linux 多线程应用中编写安全的信号处理函数
Linux 多线程应用中编写安全的信号处理函数在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为程序运行出错,而是程序逻辑需要,譬如 SIGUSR1、SIGRTMIN 等,信号在被处理后应用程序还将正常运行。在编写这类信号处理函数时,应用层面的开发人员却往往忽略了信号处理函数执行的上下文背景,没有考虑编写安全的信号处理函数的一些规则。本文首先介绍编写信号处理函数时需要考虑的一些规则;然后举例说明在多线程应用中如何
2011-04-13 13:39:00
357
转载 声明解析
<br />// State.cpp : Defines the entry point for the console application.<br />//<br />#include "stdafx.h"<br />#include <stdio.h><br />#include <string.h><br />#include <stdlib.h><br />#define MAX_TOKENS 100<br />#define MAX_TOKEN_LEN 60<br />#define STRC
2011-04-12 09:18:00
223
转载 状态机
<br />有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。<br /> <br />最近看了一些游戏编程AI的材料,感觉游戏中的AI,第一要说的就是有限状态机来实现精灵的AI,然后才是A*寻路,其他学术界讨论比较多的神经网络、模糊控制等问题还不是很热。<br /> <br />FSM的实现方式:<br />1) switch/case或者if/else<br />这无意是最直观的方式,使用一
2011-04-09 15:52:00
94
原创 同步
<br /><br />// file_overlap.cpp : Defines the entry point for the console application.<br />//<br /> <br />#include "stdafx.h"<br /> <br />/*<br /> <br />注意请保证存在文件c:/temp/large_file.dat,并且保证文件有130MB以上<br />如果不存在该文件可以使用<br /> copy a.dat /B + b.dat /B c.dat
2011-02-27 22:53:00
262
原创 speed
<br /><br />// diskspeed.c, Copyright Alexander Grigoriev, alegr@aha.ru<br />// measures disk read/write speed in cached and direct modes<br />// and CPU load percent.<br /> <br />#include <windows.h><br />#include <stdio.h><br />#include <process.h><br />
2011-02-27 22:35:00
296
原创 一个简单的CEdit自绘类
自绘的CEdit类CEditExTypedef BOOL (*CEditExCallback)(UINT nChar, void* pData);Class CEditEx :public CEdit{Public:CEditEx();~CEditEx();Protected:Void setEnable(bool bEnable);Void setAcceptFunc(CEditExCallback fAcceptFunc, void* pCaller);Protected: afx_msg voi
2011-01-12 22:46:00
1951
原创 一些网址
<br />http://www.yesky.com/SoftChannel/72342371928702976/72342371928702976_20.shtml
2011-01-06 20:49:00
211
原创 一个简单通过UDP发送给自己消息的聊天工具
<br /><br />创建一个简单的聊天工具<br />先创建一个对话框程序。<br /><br />1. 首先要初始化socket.<br />在CWinApp::InitInstance 中添加<br />if (!AfxSocketInit())<br />{ <br />AfxMessageBox(_T("Failed to Initialize Sockets"), MB_OK | MB_ICONSTOP); return FALSE;<br />}<br /><br
2011-01-04 22:04:00
520
转载 线程CreateThread 间的同步 和只能运行一个实例
#include #include DWORD WINAPI threadPro( LPVOID lpParameter );DWORD WINAPI threadPro1( LPVOID lpParameter );int num = 100;HANDLE hMutex;int main(){//互斥对象包含一个使用数量, 一个线程ID,和一个计数器,ID拥有用于识别系统中那个线程拥有互斥对象//计数器用于指明该线程用于互斥对象的次数。hMutex = CreateMutex(NULL, FALSE, "
2010-12-29 23:30:00
1179
转载 CRgn
<br /><br />Windows 中不规则窗体的编程实现<br /><br />作者:上海伟功通信 roc<br />下载源代码<br /><br />一、序言<br /><br /> 在绝大多数的Windows应用程序中,其窗体都是使用的正规正矩的矩形窗体,例如我们常用的,“记事本”,“扫雷”,等等。矩形窗体,具有编程实现简单,风格简洁的优点,所以在普通文档应用程序和 简单小游戏中使用足矣。但在某些娱乐游戏程序中使用就略显呆板些了,这时若用不规则窗体替代原先 的矩形窗体,将会使这类程序更添情趣。典
2010-12-27 23:10:00
4806
1
原创 一个简单的TCP服务器客户端模式的程序
这个是一个TCP的服务器的程序需要在工程设置里面的Link的动态链接库中加入 Ws2_32.lib#include //socket程序需要的头文件。#include int main(){/*************以下这段代码是复制的MSDN 中的WSAStartup 下的代码********************/WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1
2010-12-26 23:25:00
117
转载 CStatic 中的DrawItem
静态控件也是比较常用的控件,在VS开发环境中用的应该挺频繁的吧。 其实mfc中实现对窗口美化,主要依赖于重绘。static控件也是个窗口,windows为其留有自绘的权利,可以设置其样式为SS_OWNERDRAW,Windows就会把其绘制权利交给我们的代码,怎么绘制就看我们的代码了。mfc中更好的一种方式就是消息反射,省的自己来做这一步操作了,我们重载CStatic中的DrawItem方法,进行自绘,基本就可以了。其实如果自己在OnPaint里画也是可以的(对于任何控件窗口都可以的,只是麻烦或者有其他的问
2010-12-26 11:22:00
1608
原创 CStaticText类继承于CStatic类用于显示文本控件
<br />这里讲的是一个继承CStatic类的文本类<br /><br />class CStaticText : public CStatic<br />{<br />// Construction<br />public:<br />CStaticText();<br /> virtual ~CStaticText();<br /><br />// Overrides<br />// ClassWizard generated virtual function overrides<br />//
2010-12-26 08:41:00
794
原创 CArchive 类的用法
1、CArchive的写入。首先你必须创建一个CFile类在创建一个CArchive类对象的时候。 另外你必须保证archive 的加载或者存储状态与文件打开的方式一致。CFile fileWrite("D://GL//游戏//TEST//1.txt", CFile::modeCreate | CFile::modeWrite);CArchive ar(&fileWrite, CArchive::store);int i = 4;char ch = 'a';float f = 1.0f;CString st
2010-12-19 23:45:00
1791
原创 文件操作
文件操作1、首先想要向一个文件中写入一个字符串。 这个时候需要一个文件结构体FILE 来操作文件流。char* filePath = "D://GL//游戏//TEST//1.txt";FILE* pFile = fopen( filePath, "w");fwrite("I love you!", 1, strlen("I love you!"), pFile);这是以写的方式打开一个文件。并且写入一个 I love you 的一个字符串。fwrite的第一个参数是要写入字符串数组的一个指针
2010-12-19 09:11:00
338
原创 使得DC上的图像保持
使得DC上的图像和文字具有保存功能画的图像有三个要素1、线的类型 m_lineType 说明画的是什么, 点、线、矩形、还是椭圆。2、开始画的起始点 m_originPoint 3、画的终点m_curPoint首先创建一个类CGraph用于 保存这三个值,并且初始化这三个值。Graph.hclass CGraph {public:CGraph();CGraph(UINT m_lineType, CPoint m_originPoint, CPoint m_curPoint);virtual ~CGraph
2010-12-16 22:23:00
250
原创 图形的绘制和保持, 贴图
图形的绘制和保持, 贴图1. 设置菜单是程序能画点、线、矩形、椭圆。1.首先在菜单上添加一个菜单-》绘图, 添加子菜单分别为点、线、矩形、椭圆。对应每一个子菜单用Classizard在view类中建立对应的处理函数。因为是四个菜单, 需要在View类中添加一个变量用与存储用户选择的类型。在View类中添加一个UINT的Private的变量m_lineType。在点的处理函数中给m_lineType = 1;其余依次加一。2. 然后添加鼠标的点击处理函数对应的在View类中添加WM_LBUTTONDOWN 和
2010-12-08 21:58:00
337
原创 VC++ 中 改变窗口的大小和样式
改变窗口的外观和大小 改变窗口的外观和大小需要在窗口创建以前改变。 所以我们可以在CMainFrame的 PreCreateWindow中改变CREATESTRUCT 结构体的值就行了。E.G.BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)改变窗口的大小 -> cs.cx = 300; cs.cy = 200;要改变窗口标题栏的字符串: cs.lpszName = "Seven"; 会发现标题栏不会改变窗口的标题栏的上的字符串。改变单文档应用程序的
2010-11-29 22:41:00
4159
1
原创 辅助性比较操作符
class MyClass{public: friend bool operator MyClass(const int& value):a(value){} bool operator==(const MyClass& v) { return a == v.a; } void print() { std::cout }private: int a;};bool operator
2010-11-08 21:47:00
236
转载 以C++完成线性查找
<br /> <br />template <typename Iterator, typename T><br />Iterator find1(Iterator begin, Iterator end, const T& value)<br />{<br /> while(begin != end && *begin != value)<br /> {<br /> ++begin;<br /> }<br /> return begin;<br />}<br /
2010-11-03 20:39:00
202
转载 以C 完成线性查找
strchr函数的形式: char* strchr(char* s, int c);strchar 会在字符串s中查找数值 c。从头到尾的依次检查特定的值c 是否出现在字符串s中。如果目前元素的值与该特定数值相同, 就返回此元素在目前字符串中的位置。否则移到下一位, 如果没有下一位到达字符串尾。返回一个值表示查找失败。char* strchr(char* s, int c){ while(*s != '/0' && *s != c) ++s; return *s == c ? s
2010-11-02 23:46:00
208
转载 linux下接收用户输入密码的完美实现
一个小问题,在linux编一个接收用户输入密码小程序,不显示密码。google和baidu了一下,竟然没有找到现成的,好吧,自己编一个。哪里想到,竟然一波三折。哈哈,最终还是搞定了!1) 很容易根据termios的结构屏蔽终端属性的输出。但是,这样一来,用户的输入不显示在屏幕上。用户不知道自己输入的个数。对输入的内容心里也没有底。非常不方便。2)于是改为一个一个字符的处理格式。编程实现了用'*'代替用户的输入。但是这样linux处于非授权模式,一个限制是‘退格’键不能用。用户必须保证一次输入正确,万一错了的
2010-11-01 22:30:00
342
原创 lists, stacks, and queues
<br />Lists, Stacks,<br />and Queues<br />3.1 template <typename Object><br />void printLots(list <Object> L, list<int> P)<br />{<br />typename list < int > ::const_iterator pIter ;<br />typename list < Object >::const_iterator lIter ;<br />int start = 0;<
2010-10-24 11:49:00
308
转载 Introduction
<br />C H A P T E R 1<br />Introduction<br />1.4 The general way to do this is to write a procedure with heading<br />void processFile( String fileName );<br />which opens fileName, does whatever processing is needed, and then closes it. If a line of the f
2010-10-24 11:41:00
166
转载 条款9: 避免隐藏标准形式的new
<br /> <br /> 条款9: 避免隐藏标准形式的new<br /> <br />因为内部范围声明的名称会隐藏掉外部范围的相同的名称,所以对于分别在类的内部<br />和全局声明的两个相同名字的函数f来说,类的成员函数会隐藏掉全局函数:<br />void f(); // 全局函数<br />class x {<br />public:<br /> void f(); // 成员函数
2010-10-23 16:03:00
128
转载 条款10: 如果写了operator new就要同时写operator delete
<br /> <br /> 条款10: 如果写了operator new就要同时写operator delete<br /> <br />让我们回过头去看看这样一个基本问题:为什么有必要写自己的operator new和operator delete?<br />答案通常是:为了效率。缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的但很小的对象的应用程序里,情况更是如此。<
2010-10-23 16:03:00
131
转载 条款7:预先准备好内存不够的情况
<br /> <br /> 条款7:预先准备好内存不够的情况<br /> <br />operator new在无法完成内存分配请求时会抛出异常(以前的做法一般是返回0,一些旧一点的编译器还这么做。你愿意的话也可以把你的编译器设置成这样。关于这个话题我将推迟到本条款的结尾处讨论)。大家都知道,处理内存不够所产生的异常真可以算得上是个道德上的行为,但实际做起来又会象刀架在脖子上那样痛苦。所以,你有时会不去管它,也许一直没去管它。但你心里一定还是深深地隐藏着一种罪恶感:万一new真的产生了异常怎么办?
2010-10-23 16:01:00
138
转载 条款8: 写operator new和operator delete时要遵循常规
<br /> <br /> 条款8: 写operator new和operator delete时要遵循常规<br /> <br />自己重写operator new时(条款10解释了为什么有时要重写它),很重要的一点是函数提供的行为要和系统缺省的operator new一致。实际做起来也就是:要有正确的返回值;可用内存不够时要调用出错处理函数(见条款7);处理好0字节内存请求的情况。此外,还要避免不小心隐藏了标准形式的new,不过这是条款9的话题。<br />有关返回值的部分很简单。如果内存分配
2010-10-23 16:01:00
152
转载 条款6:析构函数里对指针成员调用delete
<br /> <br /> 条款6:析构函数里对指针成员调用delete<br /> <br />大多数情况下,执行动态内存分配的的类都在构造函数里用new分配内存,然后在析构函数里用delete释放内存。最初写这个类的时候当然不难做,你会记得最后对在所有构造函数里分配了内存的所有成员使用delete。<br />然而,这个类经过维护、升级后,情况就会变得困难了,因为对类的代码进行修改的程序员不一定就是最早写这个类的人。而增加一个指针成员意味着几乎都要进行下面的工作:<br /> ·在每个构
2010-10-23 16:00:00
148
转载 条款5:对应的new和delete要采用相同的形式
<br /> <br /> 条款5:对应的new和delete要采用相同的形式<br /> <br />下面的语句有什么错? <br /> string *stringarray = new string[100];...delete stringarray;<br />一切好象都井然有序——一个new对应着一个delete——然而却隐藏着很大的错误:程序的运行情况将是不可预测的。至少,stringarray指向的100个string对象中的99个不会被正确地摧毁,因为他们的析
2010-10-23 15:59:00
130
原创 条款4:尽量使用c++风格的注释
<br /> <br /> 条款4:尽量使用c++风格的注释<br /> <br />旧的c注释语法在c++里还可以用,c++新发明的行尾注释语法也有其过人之处。例如下面这种情形: <br /> if ( a > b ) { // int temp = a; // swap a and b // a = b; // b = temp;}<br />假设你出于某种原因要注释掉这个代码块。从软件工程的角度看,写这段代码的程序员也做得很好,他最初的代码里也写了一个注释,以解释代码在做
2010-10-23 15:58:00
148
原创 条款3:尽量用new和delete而不用malloc和free
<br /> <br /> 条款3:尽量用new和delete而不用malloc和free<br /> <br />malloc和free(及其变体)会产生问题的原因在于它们太简单:他们不知道构造函数和析构函数。<br />假设用两种方法给一个包含10个string对象的数组分配空间,一个用malloc,另一个用new:<br />string *stringarray1 =static_cast<string*>(malloc(10 * sizeof(string)));string
2010-10-23 15:57:00
137
原创 条款2:尽量用而不用
<br /> <br /> 条款2:尽量用<iostream>而不用<stdio.h><br /> <br />是的,scanf和printf很轻巧,很高效,你也早就知道怎么用它们,这我承认。但尽管他们很有用,事实上scanf和printf及其系列还可以做些改进。尤其是,他们不是类型安全的,而且没有扩展性。因为类型安全和扩展性是C++的基石,所以你也要服从这一点。另外,scanf/printf系列函数把要读写的变量和控制读写格式的信息分开来,就象古老的FORTRAN那样。是该向五十年代说诀别的时候
2010-10-23 15:55:00
125
转载 条款1:尽量用const和inline而不用#define
<br /> <br /> 条款1:尽量用const和inline而不用#define<br /><br />这个条款最好称为:“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分。这是问题之一。再看下面的语句: <br /> #define ASPECT_RATIO 1.653<br /><br />编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。如果涉及到这个
2010-10-23 15:54:00
152
转载 C++ 预处理指令
<br />由ANSI的标准规定, 预处理指令主要包括: <br /> #define <br /> #error <br /> #if <br /> #else <br /> #elif <br /> #endif <br /> #ifdef <br /> #ifndef <br /> #undef <br /> #line <br /> #pragma <br /> 由上述指令可以看出, 每个预处理指令均带有符
2010-10-23 00:05:00
211
原创 C++ 中函数后面跟const是什么意思
问题:c++:void display( ) const 中的const是什么意思? 简答: 意思是除了表明了mutable的成员变量以外 该类的其他的成员变量在这个函数内一律不能修改。
2010-08-18 14:57:00
3238
原创 Try ------catch 的用法
今天整理过去的学习笔记,无意中看到这个,自己写的,居然大部分都不记得,可能是很少用到吧。干脆帖出来,大家有什么补充的。。。 1、基础介绍 try { //程序中抛出异常
2010-08-18 10:18:00
315
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人