Qt配置ROS环境

ROS Qt Creator Plug-in 4.5是一个Qt的第三方插件,可以使用Qt方便地在ROS环境编程,比使用VIM或先在Windows下编程再去Ubuntu环境更新程序方便的多。 无需安装Qt Creator,直接安装Qt的插件Xenial Offline Installer,链接在...

2018-09-14 23:16:37

阅读数 379

评论数 0

守护进程

守护进程是一种后台进程,类似Windows服务,它脱离终端运行,不能直接和用户交互,不受登陆注销影响,周期性执行任务,一般网络服务都以守护进程的形式运行。守护进程程序的名称通常以字母“d”结尾,例如syslogd就是指管理系统日志的守护进程。 查看守护进程的方法: ps -ajx,进程中带-1的...

2018-08-30 19:50:33

阅读数 78

评论数 0

互斥锁,读写锁,条件变量,自旋锁

互斥锁 在多线程的情况下,当一个变量可以被多个线程修改时,就需要考虑多线程同步问题。线程A修改变量前,先加锁,修改结束再解锁,然后线程B获取同样的锁,修改结束再解锁,如果不是同一把锁,同步是无效的。 在C++中使用pthread的互斥量接口实现数据同步,线程A对互斥量mutex加锁后,其他尝试...

2018-08-30 19:50:16

阅读数 347

评论数 1

Linux进程分析(三) fork循环创建Linux子进程

fork fork的意思是复制进程,就是把当前的程序再加载一次,加载后,所有的状态和当前进程是一样的(包括变量)。fork不象线程需提供一个函数做为入口, fork后,新进程的入口就在 fork的下一条语句。 返回值为pid_t,实际是unsigned int:子进程中为0,父进程中为子进程I...

2018-08-30 19:49:54

阅读数 298

评论数 0

Linux进程分析(二) 父子进程与进程组

ps命令一般用来显示终端信息和进程信息,运行命令ps -eo pid,comm,cmd可以输出所有进程的信息,e代表所有进程,后面三个参数是需要输出的信息。 第一列PID是一个整数,每一个进程都有一个唯一的PID来代表自己的身份,进程也可以根据PID来识别其他的进程。第二列COMMAND是这个进...

2018-08-30 19:49:36

阅读数 802

评论数 0

Linux进程分析(一) 虚拟内存和物理内存

物理内存面临的问题 问题 1 我们现在常用的电脑有32位和64位,这里以32位为例。32位的系统可用的地址空间有就是2的32次方,即4G,现在的电脑物理内存大多都在4G以上,可以前的电脑内存都达不到4G,我们的程序希望能用4个G,这也就是内存面临的第一个问题:物理内存小于系统位数的要求大小...

2018-08-30 19:49:17

阅读数 1388

评论数 0

基于信号量的生产者-消费者

信号量是进化版的互斥锁,互斥锁只能供一个线程使用,信号量可以供多个线程使用。如果希望在多个线程之间对某对象的部分数据共享,互斥锁无法实现,只能将整个数据锁住,这样导致线程并发性下降。 信号量既能保持同步,数据又不混乱,又能提高线程并发。 主要函数: int sem_int(sem_t* ...

2018-08-30 19:46:47

阅读数 98

评论数 0

char数组和指针问题

这个问题是C++基础问题中相当折腾人的一个,死记硬背解决不了根本问题,记住还是要忘,需要仔细研究其本质。 这两种方式就是数组和指针的方式: char a[6] = "abcde"; char *b = "abcde";...

2018-08-30 19:45:33

阅读数 564

评论数 0

fprintf,snprintf和sprintf函数

fprintf 原型:extern int fprintf (FILE *f,const char *s, ...); 可以将字符串输出到某文件中,但更常用的用法是: fprintf(stdout,"Hello\n"); //加换行 fprintf...

2018-08-29 16:59:57

阅读数 87

评论数 0

静态变量和静态函数

对于类的静态成员变量,只有static const int类型和 enum 类型能在类里面初始化,其他只能在.cpp里初始化,但不能在类体内初始化,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。 静态成员函数和静态变量在类体外初始化时,无须加stat...

2018-08-29 16:59:32

阅读数 240

评论数 0

常用shell命令

查找字符串 grep -r "struct event_base {" -n 在当前目录查找字符串,找到后返回文件和对应的行 统计文件行数、字节、字数 wc命令,选项-l, -c, -w分别统计行数、字节、字数,可统计多文件,但不能统计目录。 ...

2018-08-29 16:58:35

阅读数 68

评论数 0

安装配置qt_eventdispatcher_libevent

QT默认的是使用select模型的,这种轮询方式非常慢。在高并发连接,我们需要epoll才能发挥linux服务器的性能. 安装qt_eventdispatcher_libevent 下载安装包后,解压,找到src目录,用Qt打开pro工程,然后qmake, build。 编译完成后,在lib...

2018-08-29 16:57:40

阅读数 206

评论数 0

window下apache安装和配置

下载 32位: http://httpd.apache.org/ 64位: http://www.apachelounge.com/download/ 安装 解压Apache2.4到F:\Apache2.4 修改文件F:\Apache2.4\conf\httpd.conf: 服...

2018-08-29 16:57:05

阅读数 640

评论数 0

libevent安装配置

Libevent的特点: 1. 基于事件驱动 2. 轻量级,源码精炼,不像ACE那样庞大臃肿 3. 跨平台 4. 支持多路I/O 从网上下载安装包后放到目录解压,到libevent-2.1.8-stable目录下依次执行: ./configure make sudo make in...

2018-08-29 16:55:08

阅读数 234

评论数 0

退出与报错函数

exit函数 exit中的参数exit_code为0代表进程正常终止,若为其他值表示程序执行过程中有错误发生。出错时退出一般用exit(EXIT_FAILURE); errno errno表示错误代码。 记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。系统每一...

2018-08-29 16:54:02

阅读数 142

评论数 0

memset和memcpy函数

memset函数 原型:void *memset(void *s, int ch, size_t n); 作用:将s所指向的内存中的前n个字节的内容全部设置为ch指定的ASCII值,这个函数通常为新申请的内存做初始化工作。一般用于结构体和数组的初始化。 memset中的第三个参数一定要使用...

2018-08-29 16:53:11

阅读数 70

评论数 0

strcat strcpy strlen strcmp

strcat 我自己写的是这样: char* _strcat(char *_Dest, const char *_Source) { assert((_Dest != NULL) && (_Source != NULL)); ...

2018-08-29 16:52:51

阅读数 57

评论数 0

不要显式调用构造函数和析构函数

常用的代码如下: Base b; cout<<"hello"<<endl; 结果: 基类构造 0x62fe84 hello 基类析构0x62fe84 但是这样...

2018-08-29 16:52:01

阅读数 183

评论数 0

select poll epoll

Select select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,select在socket编程中还是比较重要的。一旦执行肯定返回,以返回值的不同来反映函...

2018-08-15 19:51:52

阅读数 79

评论数 0

函数在main之前或之后运行

C++中,全局对象的构造函数在main之前运行,析构函数在main之后运行。 类静态变量的初始化在main之前,静态函数不行。 class Base { public: Base() { std::cout<<&...

2018-08-09 22:43:01

阅读数 134

评论数 0

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