自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(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 788

原创 c expert programming

1、 对无符号类型的建议   尽量不要再你的代码中使用无符号类型, 以免增加不必要的复杂性, 尤其是, 不要仅仅因为无符号数不存在负数(如 年龄, 国债)而用它来表示数量。   尽量使用像int那样的有符号类型, 这样在涉及升级混合类型的复杂细节时, 不必担心边界情况(如-1被翻译成为非常大的正数)。只有在使用位段和二进制掩码时,才可以用无符号数。 应该在表达式中使用强制类型转换, 是操作符均为有符号数或无符号数, 这样就不必由编译器来选择结果的类型。int array[] = {0, 1, 2, 3, 4

2011-05-11 16:27:00 177

原创 看过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 168

转载 Linux 多线程应用中编写安全的信号处理函数

Linux 多线程应用中编写安全的信号处理函数在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为程序运行出错,而是程序逻辑需要,譬如 SIGUSR1、SIGRTMIN 等,信号在被处理后应用程序还将正常运行。在编写这类信号处理函数时,应用层面的开发人员却往往忽略了信号处理函数执行的上下文背景,没有考虑编写安全的信号处理函数的一些规则。本文首先介绍编写信号处理函数时需要考虑的一些规则;然后举例说明在多线程应用中如何

2011-04-13 13:39:00 325

转载 声明解析

<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 195

转载 状态机

<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 57

原创 同步

<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 221

原创 speed

<br /><br />// diskspeed.c, Copyright Alexander Grigoriev, [email protected]<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 259

原创 一个简单的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 1902

原创 一些网址

<br />http://www.yesky.com/SoftChannel/72342371928702976/72342371928702976_20.shtml

2011-01-06 20:49:00 180

原创 一个简单通过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 487

转载 线程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 1143

转载 CRgn

<br /><br />Windows 中不规则窗体的编程实现<br /><br />作者:上海伟功通信 roc<br />下载源代码<br /><br />一、序言<br /><br />  在绝大多数的Windows应用程序中,其窗体都是使用的正规正矩的矩形窗体,例如我们常用的,“记事本”,“扫雷”,等等。矩形窗体,具有编程实现简单,风格简洁的优点,所以在普通文档应用程序和 简单小游戏中使用足矣。但在某些娱乐游戏程序中使用就略显呆板些了,这时若用不规则窗体替代原先 的矩形窗体,将会使这类程序更添情趣。典

2010-12-27 23:10:00 4758 4

原创 一个简单的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 73

转载 CStatic 中的DrawItem

静态控件也是比较常用的控件,在VS开发环境中用的应该挺频繁的吧。 其实mfc中实现对窗口美化,主要依赖于重绘。static控件也是个窗口,windows为其留有自绘的权利,可以设置其样式为SS_OWNERDRAW,Windows就会把其绘制权利交给我们的代码,怎么绘制就看我们的代码了。mfc中更好的一种方式就是消息反射,省的自己来做这一步操作了,我们重载CStatic中的DrawItem方法,进行自绘,基本就可以了。其实如果自己在OnPaint里画也是可以的(对于任何控件窗口都可以的,只是麻烦或者有其他的问

2010-12-26 11:22:00 1567

原创 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 759 1

原创 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 1746

原创 文件操作

     文件操作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 308

原创 使得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 213

原创 图形的绘制和保持, 贴图

图形的绘制和保持, 贴图1. 设置菜单是程序能画点、线、矩形、椭圆。1.首先在菜单上添加一个菜单-》绘图, 添加子菜单分别为点、线、矩形、椭圆。对应每一个子菜单用Classizard在view类中建立对应的处理函数。因为是四个菜单, 需要在View类中添加一个变量用与存储用户选择的类型。在View类中添加一个UINT的Private的变量m_lineType。在点的处理函数中给m_lineType = 1;其余依次加一。2. 然后添加鼠标的点击处理函数对应的在View类中添加WM_LBUTTONDOWN 和

2010-12-08 21:58:00 302

原创 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 4098 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 210

转载 以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 183

转载 以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 182

转载 linux下接收用户输入密码的完美实现

一个小问题,在linux编一个接收用户输入密码小程序,不显示密码。google和baidu了一下,竟然没有找到现成的,好吧,自己编一个。哪里想到,竟然一波三折。哈哈,最终还是搞定了!1) 很容易根据termios的结构屏蔽终端属性的输出。但是,这样一来,用户的输入不显示在屏幕上。用户不知道自己输入的个数。对输入的内容心里也没有底。非常不方便。2)于是改为一个一个字符的处理格式。编程实现了用'*'代替用户的输入。但是这样linux处于非授权模式,一个限制是‘退格’键不能用。用户必须保证一次输入正确,万一错了的

2010-11-01 22:30:00 309

原创 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 281

转载 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 143

转载 条款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 107

转载 条款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 109

转载 条款7:预先准备好内存不够的情况

<br />   <br /> 条款7:预先准备好内存不够的情况<br /> <br />operator new在无法完成内存分配请求时会抛出异常(以前的做法一般是返回0,一些旧一点的编译器还这么做。你愿意的话也可以把你的编译器设置成这样。关于这个话题我将推迟到本条款的结尾处讨论)。大家都知道,处理内存不够所产生的异常真可以算得上是个道德上的行为,但实际做起来又会象刀架在脖子上那样痛苦。所以,你有时会不去管它,也许一直没去管它。但你心里一定还是深深地隐藏着一种罪恶感:万一new真的产生了异常怎么办?

2010-10-23 16:01:00 113

转载 条款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 121

转载 条款6:析构函数里对指针成员调用delete

<br />   <br /> 条款6:析构函数里对指针成员调用delete<br /> <br />大多数情况下,执行动态内存分配的的类都在构造函数里用new分配内存,然后在析构函数里用delete释放内存。最初写这个类的时候当然不难做,你会记得最后对在所有构造函数里分配了内存的所有成员使用delete。<br />然而,这个类经过维护、升级后,情况就会变得困难了,因为对类的代码进行修改的程序员不一定就是最早写这个类的人。而增加一个指针成员意味着几乎都要进行下面的工作:<br />    ·在每个构

2010-10-23 16:00:00 117

转载 条款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 112

原创 条款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 127

原创 条款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 107

原创 条款2:尽量用而不用

<br />   <br /> 条款2:尽量用<iostream>而不用<stdio.h><br /> <br />是的,scanf和printf很轻巧,很高效,你也早就知道怎么用它们,这我承认。但尽管他们很有用,事实上scanf和printf及其系列还可以做些改进。尤其是,他们不是类型安全的,而且没有扩展性。因为类型安全和扩展性是C++的基石,所以你也要服从这一点。另外,scanf/printf系列函数把要读写的变量和控制读写格式的信息分开来,就象古老的FORTRAN那样。是该向五十年代说诀别的时候

2010-10-23 15:55:00 101

转载 条款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 131

转载 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 184

原创 C++ 中函数后面跟const是什么意思

  问题:c++:void display( ) const 中的const是什么意思? 简答: 意思是除了表明了mutable的成员变量以外 该类的其他的成员变量在这个函数内一律不能修改。

2010-08-18 14:57:00 3167

原创 Try ------catch 的用法

  今天整理过去的学习笔记,无意中看到这个,自己写的,居然大部分都不记得,可能是很少用到吧。干脆帖出来,大家有什么补充的。。。 1、基础介绍 try { //程序中抛出异常

2010-08-18 10:18:00 278

虚拟机VMware下安装RedHat Linux 9.0 图解

虚拟机VMware下安装RedHat Linux 9.0 图解

2010-07-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除