
C/C++
文章平均质量分 73
maxcode
这个作者很懒,什么都没留下…
展开
-
NAND和NOR flash详解
NAND和NOR flash详解Lanno Cheecke 2006-9-6NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后转载 2006-09-06 22:45:00 · 1301 阅读 · 0 评论 -
Linux共享库文件(so)用法
JCConvert已经在Windows上可以工作,下一步我将在Linux平台上实现这个功能。为了保证对Linux系统so文件理解无误,先在Linux平台上创建一个so文件,并使用测试程序进行测试,其目的就是确认自己的理解是否正确。第一步是如何生成一个so文件。1.生成包含文件SoTest.h,代码如下:#include using namespace std;#ifde原创 2009-04-20 23:33:00 · 3437 阅读 · 0 评论 -
ACE获取时间信息
本文介绍了如何使用ACE框架中的ACE_Date_Time类和ACE_Time_Value类获取当前时间信息,内容包含年、月、日、时、分、秒和毫秒,这些信息在编程中会经常用到,故将其整理如下,功能很简单:每隔一秒获取当前的系统时间,打印到屏幕,同时也使用ACE_OS命名空间中的文件操作函数将其写入一文本文件,代码如下:#include #include #include #incl原创 2009-04-23 23:11:00 · 6534 阅读 · 0 评论 -
ACE操作ini配置文件
配置文件(后缀为.ini)的文件主要用作配置程序启动时的一些参数配置,每一个配置行的格式为:name=valuename:配置参数名称value:配置参数的值=:配置分隔符 配置参数可以根据功能相关性对配置行进行分组,每一个组称为一个Section,Section没有显示的终止标识,一个新的Section的开始(或文件结束)即表示前一个Section的终止.下面为原创 2009-04-25 11:22:00 · 1877 阅读 · 0 评论 -
使用Poco::Logger实现日志功能
<br />使用的Poco头文件及其对应的命名空间<br /> <br />#include "Poco/FormattingChannel.h"<br />#include "Poco/FileChannel.h"<br />#include "Poco/PatternFormatter.h"<br />using Poco::Message;<br />using Poco::PatternFormatter;<br />using Poco::FileChannel;<br />using Poco:原创 2010-12-05 16:17:00 · 5763 阅读 · 0 评论 -
多线程Poco::Logger生成日志
<br />日志函数在多线程的环境下应该可以进行同步处理,多个线程同时向同一个日志文件进行日志输出时,每一次的日志记录应保持完整,即日志功能实现了同步处理。下面的例子采用Poco的多线程编程,每次启动200个子线程,各个子线程函数负责向日志文件中写入自己的日志内容。<br />包含文件和命名空间<br />#include "Poco/Thread.h"<br />#include "Poco/Runnable.h"<br />using Poco::Thread;<br />using Poco::Run原创 2010-12-05 17:58:00 · 4639 阅读 · 0 评论 -
[ACE程序员教程笔记]单线程串行处理服务器
使用ACE的被动连接方式实现服务器打印功能。服务器采用单线串行处理方式逐个处理客户端的连接请求,连接成功后,服务器从客户端接收10个字符长度的内容,并将其显示在服务器。#include "stdafx.h"#include "ace/ace.h"#include "ace/SOCK_Acceptor.h"#include "ace/SOCK_Stream.h"#include "ace/Log_Msg.h"#define DATA_LEN 10/***接收客户端发送固定长度的文本原创 2011-01-07 10:32:00 · 951 阅读 · 0 评论 -
[ACE程序员教程笔记]单线程串行客户端
<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/Log_Msg.h"#include "ace/Sock_Connector.h"#include "ace/Sock_Stream.h"#include "ace/OS.h"/**向打印服务器发送固定长度的文本内容*每一次连接成功后,向服务器发送10次固定长度的文本内容*/class Client{public: Client(char*原创 2011-01-07 10:48:00 · 910 阅读 · 0 评论 -
[ACE程序员教程笔记]使用ACE_Thread创建多个线程
<br />ACE_Thread采用轻量级的线程包转实现了在多个操作系统之间线程编程的统一化,方便了跨平台开发的开发工作。<br />下面的代码实现了创建100个子线程,在每一个子线程函数中打印出自己线程对应的线程ID,当所有的子线程处理完成之后,主线程才可以退出整个应用程序。<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/Log_Msg.h"#include "ace/Thread.h"#include "ace/OS.原创 2011-01-08 16:08:00 · 2299 阅读 · 0 评论 -
[ACE程序员教程笔记]Task间通讯
<br />Task可以视为更高一个级别的线程对象,各个Task之间的同学也就是线程之间的通讯,在ACE中,采用了消息队列的方式进行处理。每一个Task封装一个ACE_Message_Queue,对于这个消息队列使用putq将消息压入队列,采用getq将消息出列,获取消息的顺序与压入消息的顺序相同。<br />下面的代码使用了消息队列在两个Task之间进行通讯,GenerateData任务生成数据,每间隔1秒钟会将全局变量g_nCounter增1,并将其压入队列。PrintTask任务从消息队列中获取消息,原创 2011-01-09 09:45:00 · 1196 阅读 · 0 评论 -
[ACE程序员教程笔记]将同步方法转换为异步方法
<br />对于比较耗时的处理(如IO操作),如果采用同步的调用方式,程序则会阻塞在当前调用的函数上,无法进行其它的操作,造成时间浪费,ACE提供了方法对象(ACE_Method_Object),可以实现将同步方法转换为异步方法的机制,下文中将以打印服务为例介绍如何将同步方法转换为异步调用的方法。<br />此方案采用了多线程处理的方式,将原来的类方法作为一个方法对象(ACE_Method_Object),每一次函数的调用都会创建一个方法对象,之后会将此方法对象加入到活动队列(activation queu原创 2011-01-09 11:53:00 · 1610 阅读 · 0 评论 -
[ACE程序员教程笔记]使用ACE_Thread_Manager创建线程组
<br />ACE_Thread_Manager为ACE_Thread的高级类,使用此接口可以实现对线程进行分组管理,下面将对两个不同的业务处理采用两种不同的处理方式:一个用于回显内容,另一个用于打印内容。<br />#include "stdafx.h"#include "ace/ace.h"#include "ace/Thread.h"#include "ace/Synch.h"#include "ace/Log_Msg.h"#include "ace/Thread_Manager.原创 2011-01-08 22:02:00 · 3290 阅读 · 0 评论 -
[ACE程序员教程笔记]使用ACE_Acceptor分离连接和事件处理
<br />ACE_Acceptor为一个抽象工厂,采用了客户端连接与服务处理程序分离的方式,开发人员可以分别关注两个不同的处理点,客户端连接处理与服务器处理程序都可以采用多种的方式,每一个客户端连接的处理与服务处理程序都可以实现适配。下文中的代码实现了服务器监听功能,当与客户端建立连接请求时,服务程序回调open方法,显示连接状态。<br />#include "stdafx.h"#include "ace/Reactor.h"#include "ace/Svc_Handler.h"#incl原创 2011-01-10 10:23:00 · 2733 阅读 · 0 评论 -
[ACE程序员教程笔记]使用Reactor处理信号
<br />本例演示了使用ACE_Reactor处理信号的方法,主要有三个个关键步骤:<br />1.编写信号处理函数,针对感兴趣的信号进行处理。<br />2.将此信号处理对象注册到Reactor中。<br />3.启动Reactor的事件处理循环。<br />下面的代码演示了在程序运行时按下“Ctrl+C”和“Ctrl+Break"是的处理结果。<br />#include "stdafx.h"#include "ace/Reactor.h"#include "ace/Event_Handler原创 2011-01-09 20:39:00 · 1242 阅读 · 0 评论 -
[ACE程序员教程笔记]ACE_Connector使用一个连接多个线程发送数据
<br />本例中我们采用多个线程向服务器发送数据,但只是用一个连接。客户端与服务器建立连接后调用open方法,在此方法中启动TRD_NUM个数的线程,每一个线程函数获取自己线程的ID,并组成字符串小写的一部分发送给服务器。服务器程序采用可以处理接收请求,并进行显示的服务器即可,如ACEAcceptorInputHandler.exe<br />例子程序使用activate方法,激活指定书目的线程函数。<br />#include "stdafx.h"#include "ace/Connector.h"原创 2011-01-10 12:03:00 · 2061 阅读 · 0 评论 -
[ACE程序员教程笔记]使用Reactor实现Accept和数据读取
<br />ACE_Reactor实现了操作系统多路复用和应用层事件处理。本文例子程序实现Acceptor事件和输入事件两个处理类,两个处理类均采用手动的方式进行卸载处理对象。<br />Acceptor事件处理类,此类监听ACCEPT事件,当有客户端的连接请求时,触发handle_input函数,在此函数中将创建输入事件对象,并进行注册。<br />/**处理客户端的连接请求*/class AcceptHandler : public ACE_Event_Handler{publi原创 2011-01-09 20:51:00 · 1992 阅读 · 0 评论 -
[ACE程序员教程笔记]使用ACE_Acceptor建立连接并处理连接请求
<br />本例中实现了Accept功能和输入事件处理功能。在与客户端连接建立成功之后,程序向Reactor注册输入回调事件处理函数。当客户端发送的数据到达时,此事件处理函数负责接收数据,并将其内容显示到输入设备。<br />由于ACE_Svc_Handle继承于ACE_Event_Handle,因此对事件处理只需要添加handle_input函数即可实现。<br />#include "stdafx.h"#include "ace/Reactor.h"#include "ace/Svc_Handl原创 2011-01-10 10:40:00 · 2790 阅读 · 0 评论 -
汉字数目与阿拉伯数字转化之二
上一篇实现使用C++实现了汉字数目转化为阿拉伯数字的引擎,其接口仅能供c++语言使用,本文将在上一篇的基础上,将其转化为c语言可以使用的动态链接库,既可以供C++代码使用,又可以供C源代码使用,开发环境以VS2008为例,其它编译器的移植在后续的文章中逐步实现,包含文件内容修改为如下模样:// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件原创 2009-04-19 17:35:00 · 895 阅读 · 0 评论 -
汉字数目与阿拉伯数字转化之一
本文定义了汉字数目(一百二十三)转化为阿拉伯数字(123)数据结构及函数定义,本文使用了C++STL中的常用数据结构如集合(set)、映射(map)、向量(vector)和字符串(string)等,故提供的接口仅供C++开发人员使用,C语言开发人员需要再对其进行封装,剔除C++元素,在后文中介绍,先看一下包含文件是如何定义的。#ifndef __JCCHINESE_TO_NUM__原创 2009-04-19 16:45:00 · 1078 阅读 · 0 评论 -
ACE有界栈用法
ACE_Bound_Stack与标准库中stack用法比较#include void stack_test(){ //打印当前函数名称 ACE_DEBUG((LM_DEBUG,ACE_TEXT("%s/n"),__FUNCTION__)); //使用ACE有界栈 ACE_Bounded_Stack bs_int_stack(10); for (int i = 0;原创 2009-02-25 23:59:00 · 622 阅读 · 0 评论 -
2005-2006年手机嵌入式内存现状和趋势研究报告
《2005-2006年手机嵌入式内存现状和趋势研究报告》简介 随着手机功能的增多,性能的加强,内存所占手机的成本比例越来越高,某些高端手机和智能手机中内存所占的成本比例最高。因此,很有必要对手机内存做以详细的研究。手机内存容量发展趋势<v:shapetype id="_x0000_t75"coordsize="21600,21600" o:spt="75" o:preferrel转载 2006-09-06 22:57:00 · 2524 阅读 · 0 评论 -
基于WinSocket的单线程Server的实现
基于WinSocket的单线程Server的实现功能描述:程序实现一个Server监听端口的功能,运行后,其处于监听状态。当有Client连接到此Server,它停止监听,接收到自此client的数据,并将从Client收到数据反射给Client。 调用顺序:1. WSAStartup:开始对WS2_32.dll的使用。2. socket:创原创 2006-05-10 07:56:00 · 1730 阅读 · 1 评论 -
一个简单用C语言实现的日志函数
一个简单用C语言实现的日志函数名称:zLog 功能:实现对程序中函数,变量及自定义消息的记录功能。此函数仅为单线程调用,没有添加同步控制。若要在多线程中调用,可以修改日志函数或自己在程序中添加同步条件。需要的文件:time.h,timeb.h,stdio.h主要函数: void WriteLog(int Priority,const char* Fmt,原创 2006-05-05 17:19:00 · 6477 阅读 · 0 评论 -
WinMain中的Console与main中的Window
WinMain中的Console与main中的WindowLanno ckeeke2006-5-91.如何在WinMain中创建一个Console。调用AllocConsole分配一个Console资源;调用GetStdHandle获得OS的标准设备(输入,输出或错误),此函数返回一个句柄,若要使用标准C库函数,则需要根据获得的句柄转化为文件描述符;将此描述符与输出绑定就可以将它视翻译 2006-05-09 00:28:00 · 4039 阅读 · 1 评论 -
利用Windows重定向器实现对网络计算机的读写
利用Windows重定向器实现对网络计算机的读写功能:实现对某个文件的监视,当被监视的文件大小改变时,利用Windows重定向器向目的机写入数据。当发现被监视的文件大小改变时,程序将读取本地机上被监视的文件内容,将其内容重新写入目的机子上。注意事项: UNC路径格式://[服务器]//[共享名]//[路径] 安全:对远程的计算机指定的路径应该有访问权。 被原创 2006-05-06 20:25:00 · 1512 阅读 · 0 评论 -
ZSChatServer线程设计模型
ZSChatServer线程设计模型Lanno Ckeeke LC2006061401Server与Client交互方式Server启动后进入监听状态,等待Client的连接。所有Client的请求都必经过Server,再由Server发送给指定的Server。 完成功能 建立服务器的线程模型,并能够接收来自客户端的请求(包含端口5005和5006的数据)。原创 2006-05-15 22:26:00 · 1122 阅读 · 0 评论 -
ZSChatServer线程设计模型---客户端测试程序
ZSChatServer线程设计模型------客户端测试程序Lanno Ckeeke LC2006051501功能: 此客户程序与《ZSChatServer线程设计模型》一文中实现的服务器程序建立连接,对其进行简单的数据传输正确性进行验证。此程序发送的数据为如下:原创 2006-05-15 23:11:00 · 1202 阅读 · 0 评论 -
Udp数据接收端实现
Udp数据接收端实现Lanno Ckeeke LC2005052201概要Udp协议为非面向连接的协议,数据的发送与接收并不需要像TCP/IP协议那样事先建立连接,因此在数据发送速度及资源消耗表现上都胜于TCP/IP;但UDP为非可靠协议其发送(接收)数据并不一定能够保证对方能够正确的接收(发送),其可靠性需要另外的机制来实现。 发送端的实现用到的几个函数1.原创 2006-05-22 21:40:00 · 2052 阅读 · 0 评论 -
锁定模式下的非锁定实现
锁定模式下的非锁定实现Lanno Ckeeke 2006060701说明锁定模式下为了避免socket在进行IO操作时一直处于“凝固”状态,简单地用两个线程来实现:一个线程用于数据的接收;另一个线程则用于对接收到的数据进行相关的处理。因为由两个线程来实现,其特点:① 对数据的处理可以是耗时操作,它不会对数据的接收带来影响。② 对数据的接收与处理分别在不同的线程原创 2006-06-07 22:38:00 · 1195 阅读 · 0 评论 -
提取16X16汉字字库用于LCD显示
提取16X16汉字字库用于LCD显示Lanno Cheeke 2006-8-24使用文件:UCDOS中的HZK16字模文件原理:获取汉字的区位码(又称GB码),在HZK16中算出此汉字的起始地址,以16x2数组方式保存,数组中的值为1则打印,否则为空。程序说明:所使用的文字为一级汉字。双击:位码增一;右击:区码增一。原创 2006-08-24 22:33:00 · 5666 阅读 · 0 评论 -
大端(Big Endian)与小端(Little Endian)详解
大端(Big Endian)与小端(Little Endian)详解【大端(Big Endian)与小端(Little Endian)简介】Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering,或Byte Order。 对于数据中跨越多个字节的对象, 我们必须为它建立这样的约定:(1) 它的地址是多少?(2) 它的字节在内存中是如转载 2009-02-14 14:47:00 · 20295 阅读 · 4 评论 -
使用ACE互斥,同步线程共享的数据资源
1.多个线程如何创建;2.如何创建互斥(ACE_Thread_Mutex;3.创建公共数据资源;4.互斥体的获取与释放;/**同步与不同步的结果, *UpdateData不进行同步 *UpdataMutexData使用互斥进行同步 */class SyncData{public: SyncData():i_(0){} //不使用同步 void Upd原创 2009-02-14 23:25:00 · 730 阅读 · 0 评论 -
使用ACE创建线程
使用ACE_Task_Base创建多线程,演示功能如下:1.如何创建子任务(子线程);2.如何在子任务中使用参数;3.如何激活子任务;4.如何等待子任务; #include "ace/Task.h"#include "ace/Log_Msg.h"#define NUM_THREADS 100/** *创建一个基于ACE_Task_Base的子类 */原创 2009-02-14 22:50:00 · 1999 阅读 · 0 评论 -
使用ACE创建进程
#include "stdafx.h"#include "ace/Log_Msg.h"#include "ace/OS_NS_unistd.h"#include "ace/Process_Manager.h"#define NUM_PROCESSES 4int ACE_TMAIN(int argc, ACE_TCHAR* argv[]){ //获得进程管理器 ACE原创 2009-02-14 22:28:00 · 3237 阅读 · 0 评论 -
ACE守护的用法
使用Guard同步两个线程对全局变量的访问控制,其中一个线程在递增其值时,另一个线程则在等待这个线程。守护在inc_g结束后将会释放,故在每一次调用后,另一个线程将获得Guard。// GuardTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "ace/Log_Msg.h"#include "ace/Thread_M原创 2009-02-16 00:07:00 · 1431 阅读 · 0 评论 -
ACE双向链表用法
演示了ACE双向链表与STD链表的用法// EchoServer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "ace/Containers.h"#include "ace/Log_Msg.h"#include using namespace std;int ACE_TMAIN(int argc, ACE_TC原创 2009-02-25 23:37:00 · 748 阅读 · 0 评论 -
[ACE程序员教程笔记]使用ACE_Connector连接服务器
<br />与ACE_Acceptor相同,它实现的是连接与数据处理的分离。同样也是继承于ACE_Svc_Handler类,当连接成功后,Reactor会自动的回调open方法,注意本例中的SvcHandle与Acceptor中的事件处理是相同的,所修改的只是连接部分,这恰恰说明了连接与数据处理分离的优点。<br />#include "stdafx.h"#include "ace/Connector.h"#include "ace/Reactor.h"#include "ace/Svc_Han原创 2011-01-10 11:04:00 · 4703 阅读 · 1 评论