现在的位置: 首页 > 综合 > 正文

pjLib文档阅读概要

2013年12月07日 ⁄ 综合 ⁄ 共 2211字 ⁄ 字号 评论关闭

 说明本文档主要有两部分,包括
Pjlib

简介和
pjlib


visual studio

中的调试

一.
Pjlib

简介:

PJLIB提供了一系列特征,涉及到:


  

1).非动态内存分配[No Dynamic Memory Allocations]


     

实现了内存池,获取内存是从与分配的内存池中获取,高性能程序多会自己构造内存池,是常规的 malloc()/free()函数的30 




  

2).OS抽象[Operating System Abstraction]


     

实现OS抽象的根本原因在与可移植性,毋庸置疑:).



     

涉及到:


     

a).线程[Threads.]


     

b).线程本地存储[Thread Local Storage.]


     

c).互斥[Mutexes.]


     

d).信号灯[Semaphores.]


     

e).原子变量[Atomic Variables.]


     

f).临届区[Critical sections.]


     

g).锁对象[Lock Objects.]


     

h).事件对象[Event Object.]


     

i).时间管理[Time Data Type and Manipulation.]


     

j).高解析的时间戳[High Resolution Timestamp.]  



  

3).低层的网络相关IO[Low-Level Network I/O]


  

   
这涉及到:



  

   
a).Socket抽象[Socket Abstraction.]



  

   
b).网络地址解析[Network Address Resolution.]



  

   
c).实现针对Socket的select API[Socket select() API.]



  

   



  

4).时间管理[Timer Management]


     

这主要涉及到两个部分,一个时定时器的管理,还有就是时间解析的精度(举例说来,就是能精确到哪个时间等级,比如 POSIX sleep(),就只能以秒为单位,而使用select()则可以实现毫秒级别的计时)



  

5).各种数据结构[Various Data Structures]


     

主要有:



     

a).针对字符串的操作[String Operations]


     

b).数组辅助[Array helper]


     

c).Hash表[Hash Tabl]


     

d).链表[Linked List]


     

e).红黑平衡树[Red/Black Balanced Tree] 



  

6).异常处理[Exception Construct]


     

使用的是TRY/CATCH    




  

7).LOG机制[Logging Facility]    



  

8).随机数以及GUID的产生[Random and GUID Generation]


     

GUID指的是"globally unique identifier",只是一个标识而已,比如说你的省份证,算的上是一个GUID,当然,准确说来是

china unique identifier”:). 



4.
PJLIB的使用



  

有了上述介绍,是不是很想知道这个库的使用,没关系,我们慢慢说来 :)



  

首先是头文件和编译出来的库的位置


  

1).为了使用这个库,需要使用:


  

#include <pjlib.h>


  

当然,也可以选择:


  

#include <pj/log.h>


   
#include <pj/os.h>



   
这种分离的方式,不过,简介其间,还是使用第一种吧:),毕竟,你不需要确认到你所需的函数或者数据结构具体到哪个具体的头文件:)



   
2).确保在使用PJLIB之前调用 pj_init()来完成PJLIB库使用前说必须的一些初始化

.


这是一个必不可少的步骤


   
3).使用PJLIB的一些建议



   
作者对使用PJLIB的程序提出了一些建议,包括如下:



   
 
a).不要使用ANSI C[Do NOT Use ANSI C]



   
 
观点很明确,ANSI C并不会让程序具有最大的移植性,应该使用PJSIP库所提供的响应机制来实现你所需要的功能

.


   
 



   
 
b).使用pj_str_t取代C风格的字符串[Use pj_str_t instead of C Strings]



   
 
原因之一是移植性,之二则是PJLIB内置的pj_str_t相关操作会更快(性能).



   
 
c).从内存池分配内存[Use Pool for Memory Allocations]   



   
 
d).使用PJLIB的LOG机制做文字显示[Use Logging for Text Display]

还有些关于移植的一些问题,相见文档
PJLIB Reference Manual


.
下面介绍一下具体的使用:

1.

visual studio

打开文件
pjproject-1.3/pjlib/build

下的
pjlib.dsw

2

在:
/pjproject-1.3/pjlib/include/pj

目录下新建一个空白文件:
config_site.h

3

选择
Pocket PC 2003 SE Emulator

平台,右键
build pjlib

编译

4

右键点击
pjlib_test

选择
set as StatUp Project


5.

点击
debug

,运行后出现下面界面(按时间顺序)

 

 

6.

切换到
windows mobile

平台

 


4.

选择平台
windows mobile

,再点击
debug

,也可运行

抱歉!评论已关闭.