- 博客(69)
- 收藏
- 关注
原创 Linux系统编程——文件的打开与关闭
#include#include#include#include#include#include#include#include// #define ERR_EXIT(m) (perror(m), exit(EXIT_FAILURE))#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_
2014-09-06 17:59:06
886
原创 do...while(0)在宏定义中的用法
在Linux内核和其他一些开源的代码中,经常遇到下面的代码:do{ ...}while(0)其用法体现在如下几个方面:1.辅助定义复杂的宏,避免引用的时候出现错误:#defineDOSOMETHING()\foo1();\foo2();以上宏定义的意思是当调用DOSOMETHING()的时候,函数foo1()和foo2()都会被调用当如果你如此
2014-09-04 19:59:56
771
转载 Linux多线程——使用互斥量同步线程
一、什么是互斥量互斥量是另一种用于多线程中的同步访问方法,它允许程序锁住某个对象,使得每次只能有一个线程访问它。为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁。
2014-08-28 17:59:01
562
转载 Linux多线程——使用信号量同步线程
一、什么是信号量线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。而只有0和1两种取值的信号量叫做二进制信号量,在这里将重点介绍。而信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。我们可以使用二进制信号
2014-08-18 18:01:39
634
原创 Linux进程间通信——使用数据报套接字
一、简单回顾——什么是数据报套接字。socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。也因为这样,套接字明确地将客户端和服务器区分开来。相对于流套接字,数据报套接字的使用更为简单,它是由类型SOCK_DGRAM指定的,它不
2014-08-17 10:22:38
643
原创 Linux进程间通信——使用流套接字
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程。通常我们使用socket进行网络编程,这里将会简单地讲述如何使用socket进行简单的网络编程。一、什么是socketsocket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发
2014-08-15 09:41:51
503
原创 共享内存
共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。原理图如下:
2014-08-05 22:58:00
656
原创 C++的多态性以及静态联编和动态联编
联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编
2014-07-19 22:29:47
2136
原创 内存分配中的栈和堆
C语言程序内存分配中的堆和栈:一般情况下程序存放在Rom(只读内存,比如硬盘)或Flash中,运行时需要拷到RAM(随机存储器RAM)中执行,RAM会分别存储不同的信息,如下图所示:
2014-07-15 23:42:19
895
原创 整形与字符型之间的相互转换
#include"stdio.h"#include"stdlib.h" //将整型数转化为一个字符串void my_itoa(int n,char s[]){ int i=0; int j,sign; char c; if((sign=n)<0)//记录符号 n=-n;//使n成为正数 do{ s[i++]=n%10+'0';//取下一个数字 }while((n/
2014-07-13 22:13:52
3034
原创 快速排序(QuickSort)
#includevoid quickSort(int a[],int left,int right){ int i=left; int j=right; int temp=a[left]; if(left>=right) return; while(i!=j) { while(i=temp) j--; if(j>i) a[i]=a[j]; while(i
2014-07-06 22:03:30
572
原创 冒泡排序算法
#include #include #define SIZE 8 void bubble_sort(int a[],int n) //n为数组a的元素个数{ int i,j,temp; for(j=0;j<n-1;j++) for(i=0;i<n-1-j;i++) { if(a[i]>a[i+1]) //数组元素大小
2014-07-03 22:33:13
510
原创 Hash表
Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找
2014-07-02 21:17:46
787
原创 统计单词(状态机)
问题:统计一段由字符和和空格组成的字符串中有多少个单词?如果对一个字符串进行处理,那么可以有下面几种情形:初始状态,字符状态,空格状态,结束状态。那么这几种状态之间应该怎么迁移呢? 初始状态: 如果输入符号是空格,那么进入空格状态;如果是字符,那么就进入字符状态,同时单词个数+1;如果是结束状态,那么直接返回; 字符状态:如果输入符号是空格,那么进入空格状态
2014-07-01 21:23:23
718
转载 SQL Server 2005为数据库设置用户名和密码的方法
1、打开SQL Server Manager管理器,在左面找到 ‘安全性’ 单击右键 选择‘新建”-》“登录”, 如下图2、弹出对话框,在登录名中输入你的登录号,选择'SQLSERVER身份验证',并输入密码,可以把‘用户下次登录时必须修改密码’取消掉。如图:3、点击‘用户映射’,在右面选择要映射的数据库,并在前面打勾,在下面一栏中‘db-owner’和‘publi
2014-03-14 11:00:51
1256
原创 项视图类
1.只读的QListWidget演示的是一个允许用户在列表中选择流程图符号的简单对话框开始,每个项都由一个图标,一段文本和一个唯一的ID组成。FlowChartSymbolPicker::FlowChartSymbolPicker( const QMap &symbolMap, QWidget *parent) : QDialog(parent){ id
2014-02-17 22:30:29
771
原创 基于QMainWindow主窗体程序
下面实现的是一个基本主窗口程序,包含一个菜单栏,一个工具栏,中央可编辑窗体以及状态栏#ifndef MAINWINDOW_H#define MAINWINDOW_H#include class QAction;class QMenu;class QToolBar;class QTextEdit;class MainWindow : public QMainWindow{
2014-01-29 15:45:48
1301
原创 多线程(笔记)
QSemaphore是互斥量的另外一种泛化表现形式,与读写锁定不同,信号量semaphore可以用于保护一定数量的资源。一个典型的信号量应用程序是当两个线程间传递一定量的数据DataSize时,这两个线程会使用某一特定大小(BufferSize)的共享环形缓冲器buffer。const int DataSize =10000;const int BufferSize = 4096;
2014-01-10 21:27:36
776
转载 Qt实现屏保功能,鼠标一定时间无响应程序进入待机状态
使用Qt实现类似与屏保的功能,当鼠标在一定时间内一直停留在一个位置的时候,程序会自动切入到其他界面(用于显示一些信息),当鼠标移动的时候,屏幕切换回来,效果类似于屏幕保护。实现想法如下:想法一:继承QApplication类,重写bool Application::notify(QObject *obj, QEvent *e)函数,获取QEvent,
2014-01-10 21:23:34
2463
1
原创 Qt之事件
1.获取鼠标事件鼠标事件包括鼠标移动,按下,松开,以及鼠标双击。#ifndef MOUSEEVENT_H#define MOUSEEVENT_H#include class MouseEvent : public QMainWindow{ Q_OBJECTpublic: MouseEvent(); ~MouseEvent();private:
2013-12-28 13:50:54
1799
原创 Qt C++ GUI
用户界面应用程序:子类化QMainWindow:Spreadsheet例子首先将MainWindow类定义为QMainWindow的子类。其包含自己的信号和槽,所以包含了Q_OBJECT宏#ifndef MAINWINDOW_H#define MAINWINDOW_H#include class QAction;class QLabel;class FindDialog;
2013-12-25 11:16:14
1770
原创 Linux之布局管理
Linux中管理子窗口部件的布局一共有三种方法,绝对位置,人工布局还有布局管理器法。绝对位置法最原始,通过对窗体的各个子窗口部件分配固定的大小和位置以及对窗体分配固定的大小实现,有着很多缺点。一般不采用。人工布局法尽管还需要给定窗口部件的绝对位置,但是利用人工布局给定的大小总是可以和窗口的大小成比例。但仍然存在文本被截断的危险。最后要用的是布局管理器:最为重要的三种布局管理器是QH
2013-12-15 18:33:34
1410
原创 Linux与网络通信:基于TCP的网络聊天室
网络聊天室的功能,现在我通过Qt提供的QTcpServer和QtcpSocket实现。TCP是一种可靠的,面向连接,面向数据流的传输协议,适用于高层协议,其中高层协议包括HTTP,FTP,而TCP协议非常适合数据的连续传输。聊天室分为服务器端和客户端,服务器程序可以创建一个聊天室,而客户端程序可以输入登入的用户名,服务器地址以及所使用的端口号码,然后进入聊天室,在聊天室中的每个用户都可以看
2013-11-28 16:37:42
2684
1
原创 Qt ui在程序中的使用方式
Qt 通过Qt designer 可以生成ui文件,在使用时可利用Qt自带的uic工具生成ui.xxx.h文件进行使用。利用Designer设计生成的ui有三种使用方式1.直接使用法QWidget *w = new QWidget;Ui::Small s;s.setupUi(w);w.show();2.单继承法#ifndef WIDGET_H#define W
2013-11-17 22:13:34
2559
原创 使用进度条
Qt提供两种显示进度条方式,QProgressBar和QProgressDialogQProgressBar类提供了一种横向或纵向显示进度的控件表示,用来描述任务的完成情况QProgressDialog类提供了一种针对慢速过程的进度对话框表示方式,用于描述任务完成的进度情况。
2013-11-16 12:40:07
2221
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅