C/C++
文章平均质量分 68
hello_wyq
这个作者很懒,什么都没留下…
展开
-
如何定位list中数据单元
list中没有提供operator+=操作,所以对于快速定位是一件罗嗦的事情(自己写循环语句是令人烦恼的)。值得庆幸的是,我们可以使用 中的advance函数来轻松搞定此事。情况下面演示代码:#include #include #include using namespace std;int main( void ){ list il; for ( int i = 0; i {原创 2006-07-05 17:34:00 · 2305 阅读 · 0 评论 -
如何使用System V的信号量
System V的信号量是一个庞大而且复杂的IPC模块,对于它的使用也是相对比较困难的,我的建议是使用posix.1定义的信号量,它简单易用,并且移植性好。为了便于日后对posix.1信号量的讨论,这片文章主要讨论如何使用System V的信号量的使用方法,下面一段程序简单的演示了一般的使用方法:#include #include #include #include #include #inclu原创 2006-08-01 15:52:00 · 2549 阅读 · 0 评论 -
多线程和多进程中几个信号函数的比较
在 如何使安全使用信号中,我们已经简单的介绍了int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); int sigsuspend(const sigset_t *mask);函数,它在处理进程中的信号处理是相当出色的。为了便于理解多线程中对应的信号处理函数,我将在这里再次说明一下他们的作用和对应的参数 。首先看sigpro原创 2006-08-14 10:04:00 · 2008 阅读 · 0 评论 -
使用gdb调试程序简介
使用gdb调试程序简介 源自:CaoJing (个人网站) 一、初始化 输入gdb进入gdb调试环境。或者直接输入gdb + progfile来加载文件。注意该文件是使用gcc(或g++)编译得到的。为了使 gdb 正常工作, 必须使你的程序在编译时包含调试信息,编译时必须使用-g参数来。 或者进入gdb环境后,通过命令file + progfile来加载需要调试的可执转载 2006-08-15 09:48:00 · 4378 阅读 · 0 评论 -
在linux下如何获取从系统booting时到现在所流失的时间ticks
在有些时候,我们需要获取当前系统的时间ticks,当然我们可以使用如何使安全使用信号中setitimer来完成自己的心愿,但是看看所要设计的代码,是否觉得它时一种深深的痛呢?我们不禁会问自己,有没有一种方便的方法呢?幸运的是,linux提供了这种函数,它就是: #include clock_t times(struct tms *buf);clock_t就是返回的ticks的值,在一般的linux原创 2006-08-14 10:36:00 · 2639 阅读 · 0 评论 -
请关注pthread_setconcurrency()
最近在code review一些人的代码的时候,发现了一个问题,就是很少人关注pthread_setconcurrency()函数,其实这个函数在pthread中是一个很重要的函数。在linux下,如果你忽略了这个函数的使用,那么能够并发的线程数目由实现者来控制,对于系统调度的效率而言往往不是什么好的事情,因为默认的设置往往不是最佳的。 更为糟糕的是,如果在某些系统中,如果你不调原创 2006-08-22 16:34:00 · 6761 阅读 · 1 评论 -
关于pthread_cond_signal与pthread_cond_broadcast的使用说明
在code review中,我会发现很多人喜欢在pthread_mutex_lock()和pthread_mutex_unlock(()之间调用pthread_cond_signal或者pthread_cond_broadcast函数,从逻辑上来说,这种使用方法是完全正确的。但是在多线程环境中,这种使用方法可能是低效的。posix1标准说,pthread_cond_signal与pth原创 2006-08-23 10:59:00 · 26671 阅读 · 5 评论 -
如何在linux/unix中设置线程的优先级
在linux下我们可以通过int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);来创建线程,但是如何设置线程的优先级呢?在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了int pthread_attr原创 2006-08-23 15:38:00 · 4972 阅读 · 4 评论 -
浅析信号量(Semaphore)和互斥(Mutex)
信号量和互斥是在多线程环境中必备资源,很多网友对它都有很丰富的经验和深刻的教训。因为这篇文章不将重点于如何使用信号量或者是互斥,而是从概念上简述他们之间的一些关系。 信号量一般有两种运用,一是所谓的binary semaphore,它的值只有0或者1,从技术角度看它可以产生类似于互斥的功能,但是它们有区别: 信号量的释放不一定是已经获取信号量的线程,但是互斥的释放一定要是原创 2006-08-29 14:40:00 · 5494 阅读 · 1 评论 -
如何用ftok来产生相关的key_t值
在System V中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列。这个在IPC的环境中十分的重要,比如说,服务器创建了一个消息队列,等待客户机发送请求。那么如何创建或者打开已有的消息队列呢?一般而言,我们对于服务器使用的路径和项目id(proj_id)是已知的,所以客户机可以获取相同的key来打开 消息队列并进行操作。下面就是ftok的使用原型:# include # in原创 2006-08-01 11:59:00 · 8901 阅读 · 2 评论 -
如何让errno多线程/进程安全
在linux或者unix环境中,errno是一个十分重要的部分。在调用的函数出现问题的时候,我们可以通过errno的值来确定出错的原因,这就会 涉及到一个问题,那就是如何保证errno在多线程或者进程中安全?我们希望在多线程或者进程中,每个线程或者进程都拥有自己独立和唯一的一个 errno,这样就能够保证不会有竞争条件的出现。一般而言,编译器会自动保证errno的安全性,但是为了妥善期间,我们希原创 2006-08-01 11:40:00 · 8157 阅读 · 6 评论 -
如何在多态中克隆自己
有的时候,我们在多态使用中,想使用父类的指针来克隆对应的子类,但是这些父类指针是外部传递给使用者的。也就是说,使用者并不知道对应的子类。那么在这种情况下,如可克隆自己呢?下面一段代码简单的演示了一种使用方法,希望能够给读者一些启迪。ICloneable类是关键,它的clone方法能够克隆自己。所以如果子类要能够被克隆,一定要实现ICloneable类。#include #include using原创 2006-07-26 13:22:00 · 875 阅读 · 0 评论 -
Iterator中的有价值的几个函数
1)back_insert_iterator back_inserter(_C& _X)2) front_insert_iterator front_inserter(_C& _X)3)insert_iterator inserter(_C& _X, _XI _I)这三个函数对于使用operator++操作自动插入数据到容器中是十分有帮助的。因为长度可以突破原始长度,对弈back_insert_i原创 2006-07-05 17:51:00 · 180 阅读 · 0 评论 -
如何实现引用计数对象
引用计数是实现对象共享的一种方式,在c++中被广泛的使用。对于它的实现也有千差万别,我这里仅仅提供一种最为常见的方法,以便大家不时之需。// Author : Wang yanqing// Module : Smart pointer// Version : 0.01// Date : 03-Aug-2005// Reversion:// Date :原创 2006-07-07 11:09:00 · 1626 阅读 · 0 评论 -
一道sizeof面试题的收获
今天做了一道面试题目,收获很多。请看下面一题:static char a[ 3 ][ 10 ] ;int main( void ){ char *p = a[ 0 ]; cout cout return 0;}输出的结果是什么?我开始以为a[ 0 ]是一个地址,所以两句语句是相同的结果,即 44 但是通过实际编译测试后,发现结果居然是104呵呵,原来编译器在编译的时候就原创 2006-07-11 10:39:00 · 1572 阅读 · 5 评论 -
如何使安全使用信号
”如何使用setitimer来定时“ 这片文章讲解了如何使用timer来完成定时工作,但是它使用了一个休眠函数,对于信号的处理实时性不好,这里有了一套改进的方法,以供网友讨论。#include #include #include #include using namespace std;class SignalUtil{ void (*sigHandler)( int signum );原创 2006-07-11 12:00:00 · 1692 阅读 · 1 评论 -
如何用信号来实现超时的读写机制
在使用标准库的读写操作函数时候,标准的接口是阻塞的,也就是说在没有完成动作之前,永远等待。在有些时候,我们对慢设备进行读写操作,需要有超时机制,如何实现呢?下面我简单的演示一种实现方法。#include #include #include #include using namespace std;#define INSTALL_TIMEOUT() install_signal( timeou原创 2006-07-11 14:05:00 · 1429 阅读 · 0 评论 -
使fread和fwrite的运用更加的强壮
在很多人的代码中,我们会发现很多这样的代码char buf[ 1024 ];int len = 0;...fread( buf, len, sizeof( char ), file1 );...fwrite( buf, len, sizeof( char ), file2 );在正常情况下,这些代码能够正常的运行,但是在某些特殊点程序将出现错误。我们知道fread和fwrite能够被信号中断,如原创 2006-07-11 15:34:00 · 6632 阅读 · 3 评论 -
浅谈C和C++
浅谈C和C++C是一门非常优秀的语言,在面向过程的语言中,它起到了至关重要的角色。随着软件行业的发展,面向过程的开发方式逐渐被面向对象的开发方式所替代,即我们平时所说的OOP。在这种历史背景下,需要有一种新的语言的问世,来满足日益增长的OOP软件需要。C++响应时代所求而呱呱坠地,人们的眼球为之一亮。正如C++的老祖Bjarne Stroustrup所说,C++是一门新的面向对象的编程语言。它原创 2006-07-13 10:51:00 · 1384 阅读 · 0 评论 -
一个简单封装用户命令的C++程序
在写测试程序的时候,重复编写重控制台读取命令的函数是令人乏味的,那么我们是否可以通过C++的封装性来完成一些简单的功能,以便日后的子类再次利用呢?这片文章就是在种需求的促使下,给出了一个简单的解决方案,希望网友对此有所启发。/** * @file Seminar1.cpp * @author Wang yanqing */#include #include using namespace std;原创 2006-07-14 11:17:00 · 1159 阅读 · 0 评论 -
如何正确的理解使用posix1提供的信号量
我们在使用unix/linux系统中,往往会在使用信号量时,出现比较茫然的状态。我们倒地时使用System V系统的信号量还是posix1建议实现的信号量呢?因为posix1建议实现的信号量,并非在所有unix/linux平台得到实现,所以即使使用,对于移植性来说,也未必可以得到肯定的答案。但是无论如何,个人认为我们还是最好使用posix1提供的信号量,有部分的原因请参考如何使用Syste原创 2006-08-29 15:11:00 · 1787 阅读 · 2 评论 -
请谨慎实现operator==操作符函数
请谨慎实现operator==操作符函数在c++中,==操作符是很有用的,但是它的实现也并非想象中的那样容易。本文将围绕一个简单的c++例子程序展开讨论,以便寻求一个简单的解决方法。在开始讲述等于操作符之前,我们先了解一下涉及的类定义。第一个类是一个一维点定义,很简单。一个构造器和析构器,一个operator==操作符。Definition of Class Point1D原创 2007-02-06 10:01:00 · 6634 阅读 · 0 评论 -
How to compile GCC-4.3.3 in the cygwin?
How to compile GCC-4.3.3 inthe cygwin?GMP and MPFR are two essential external libs to compile GCC. If you haveinstalled them into your environment, please skip the related sectionsfollowed.原创 2009-04-17 23:16:00 · 1267 阅读 · 0 评论 -
How to build the GCC-4.3.3 in MinGW?
How tobuild the GCC-4.3.3 in MinGW? The package is essential to buildthe environment of GCC. If you have installed them into your MinGW, please skipto the next session. [Where to downloa原创 2009-04-17 23:14:00 · 1788 阅读 · 0 评论 -
How to compile OpenJPEG in MinGW?
Normal 0 7.8 磅 0 2 How to compile OpenJPEG inMinGW?The “How tocompile and install external libs of FFMPEG?” has descri原创 2009-04-24 21:19:00 · 2738 阅读 · 1 评论 -
Use wrapper to align stack in terms of GCC calling convention
Normal 0 7.8 磅 0 2 Use wrapper to align stack in terms of GCC calling convention As the mentioned by “Do nothybrid原创 2009-05-03 07:41:00 · 1065 阅读 · 1 评论 -
收集的Firefox Plugin 演示代码超链
Firefox Plugin的编程总会遇到这样或那样的问题,制作 Firefox Plugin的几个注意点中提及了一些可能出现的情况及其解决方法,但毕竟有限,大多数的情况都是程序员靠自己的能力解决的。如果程序员能够有一些简单的演示代码作为参考,是非常有益于问题的解决。作者根据自己的一下经验,收集了一些演示代码的超链,共享给网友。 npruntime原创 2009-10-25 09:08:00 · 995 阅读 · 0 评论 -
制作Firefox Plugin的几个注意点
制作FirefoxPlugin的几个注意点1) DLL文件必须以np开头(无大小写要求),最好遵循8.3格式(现在的firefox没有这个限制),比如说npnul32.dll。2) 在创建项目的时候,最好创建空的DLL项目,否则要手动删除它们,并修改VC的一些设置,比较麻烦,不推荐。项目的名字最好是用np打头,这样就免去修改生成n原创 2009-10-23 16:07:00 · 1950 阅读 · 1 评论 -
呼唤FT_GLYPH_H
在编译MPlayer时,你是否遇到FT_GLYPH_H未定义错误?你是否在disable ASS后,错误的重现使你感到十分的困惑?我就是这种困惑的受伤者之一,然后现实的残酷又是我不得不面对它,想法设法的去解决它! 在解决这个问题之前,首先要弄清楚FT_GLYPH_H是什么?它看上去应该是一个头文件的定义,那么在MPlayer中有这个定义吗?在查询了整个目录后,笔者很失望;然而通过对原创 2009-12-25 10:56:00 · 1134 阅读 · 0 评论 -
如何在Windows上编译64位QT
编译64位的QT其实是无聊的工作,但是QT官方在windows中并未提供64位QT安装包,仅仅提供了32位。对于笔者,QT官方这种做法其实蛮让人觉得奇怪的,因为在其他系统,都有64位的安装包,或许QT官方有难言之隐吧?为何笔者要变编译这种无聊的工作?其实苦逼程序猿的死穴就是要弄的东西无法搞定。如果大家在windows上用QT开发Android和IOS的程序,那么windows64bits操作系原创 2017-10-06 18:12:27 · 10565 阅读 · 0 评论 -
How to build the environment of MSYS for the crossing compiler?
Normal 0 7.8 磅 0 2 How tobuild the environment of MSYS for the crossing compiler? [BuildMSYS root folder]原创 2009-04-20 20:09:00 · 1293 阅读 · 4 评论 -
Do not hybrid compile and link source code by using VC and GCC!
Normal 0 7.8 磅 0 2 Do not hybrid compile and link sourcecode by using VC and GCC! GCC owns cross-compiling abilities i原创 2009-04-14 21:27:00 · 1195 阅读 · 0 评论 -
How to generate DLL files by GCC in the MinGW?
Howto generate DLL files by GCC in the MinGW? [Download and Install pexports]1.Download pexports-0.43.zip.2.Unzip pexports-0.43.zip.$ unzip.exe pexports-0.43.zip3.原创 2009-04-09 21:32:00 · 1963 阅读 · 1 评论 -
浅谈pthread_setschedparam的使用
浅谈pthread_setschedparam的使用int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)在多线程开发中经常被使用的,它主要用于设置线程的调用策略和优先级。在介绍它的使用方法之前,我们先简单的介绍一下它的使用参数。1. targ原创 2007-04-09 15:32:00 · 29394 阅读 · 3 评论 -
软件编程体会(命名规则)
软件编程体会(命名规则)作者:燕青 2007年4月23日在软件开发中,数据结构和函数是整个软件必不可少的部分,对它的命名规则可能对整个项目的管理起着至关重要的作用。如果有一个良好的命名习惯,对于项目的开发和维护是相当有利的。这里我仅仅根据自己的体会,简单的阐述一下自己的心德,希望能够给读者一些有益的启迪,当然,也希望能够给我一些中肯的建议。请喜欢标准ANSC C的数据类型在很多项目原创 2007-04-23 18:46:00 · 1685 阅读 · 4 评论 -
软件编程体会(为内存调试做准备)
软件编程体会(为内存调试做准备)作者:燕青 2007年4月24日内存调试是软件开发后期最繁重,最无聊,也最令人伤心的事情。既然作为软件开发环节中的不可缺少的一环,我们是否可以为它在开发前期做些有益的事情呢?嗯,…,可以,让我们探讨一下吧。软件的内存问题,一般而言有两种。第一,内存泄露。第二,指针越界。这两个问题一直都困惑着很多的软件开发人员,这篇文章将着重探讨一下个人的解决方法。在C语原创 2007-04-24 11:02:00 · 1141 阅读 · 4 评论 -
软件编程体会(准确地使用双向链表)
软件编程体会(准确地使用双向链表)作者:燕青 2007年4月25日链表在程序设计中是最为基本的数据结构,也是相对最容易出错环节。在C++中,我们能够使用标准的STL链表,以达到软件开发的快速性,重用性和强壮性。那么,我们在C语言中如何达到这样的效果呢?嗯,…,好像ANSC C库暂时还没有吧。现在不妨让我们自己来尝试做一个可重用的双向链表吧J。首先,让我们先浏览一下下面简单演示代码,然后原创 2007-04-25 11:33:00 · 1305 阅读 · 2 评论 -
FFmpeg Understanding(6.How to compile and install external libs of FFMPEG?)
How to compile and install external libs of FFMPEG?It is a boring task to compile and installthe external libs of FFMPEG, but to enjoy many good videos/audios, I have to travelover mountains原创 2009-01-23 20:45:00 · 2223 阅读 · 5 评论 -
How to compile GCC-4.3.3 in the Linux?
Normal 0 7.8 磅 0 2 [How to compile GCC-4.3.3 in the Linux?]GMP and MPFR are two essential external libs to compile G原创 2009-03-13 19:20:00 · 1355 阅读 · 0 评论 -
How to use GCC to build DLL by DEF file in MinGW?
Howto use GCC to build DLL by DEF file in MinGW?The “How togenerate DLL files by GCC in the MinGW” has described how to generate DLLfile by the declaring prefix(__declspec( dllexport ) or __de原创 2009-04-10 20:51:00 · 3208 阅读 · 0 评论