行云

行至水穷处,坐看云起时。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

03 2013 档案

摘要:首先要装好并配置好NDK,下载UDT源码。下面从创建jni目录开始1 创建jni目录,可以是任意的xxxxxx/jni2 把udt源码移动或拷贝到jni目录下 ../udt-test/jni/UDT43 创建Android.mk在udt的src目录下添加Android.mk文件,其内容如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)APP_STL := gnustl_staticLOCAL_CFLAGS := -DLINUX -fvisibility=hiddenLOCAL_ARM_MODE := armLOCAL_CPPFLAGS :. 阅读全文
posted @ 2013-03-28 18:14 windflying 阅读(3342) 评论(0) 推荐(0)

摘要:NDK编译C++,提示找不到头文件error: fstream: No such file or directoryerror: set: No such file or directoryerror: string: No such file or directory解决办法:在所在目录,新建文件Application.mk,添加 APP_STL := gnustl_static。与STL相关的错误1 异常相关的错误error: exception handling disabled, use -fexceptions to enable。2 某些STL函数找不到undefined refe 阅读全文
posted @ 2013-03-28 17:37 windflying 阅读(7421) 评论(0) 推荐(0)

摘要:随机生成[s,e]之间互不相同的m个整数这样考虑:从n(e-s+1)个整数取m个数,那么每个数取到的概率是m/n。怎么应用这一点呢?可以这样:随机生成[1,n]之间的一个整数,如果这个数小于等于m就表示满足了m/n的概率,即概率m/n的事件发生了。数学上的证明大概是很繁琐吧,不懂~~~代码实现如下://随机生成[s, e]之间的m个互不相同的数,并放存入p[]中void GetRandomNum(int *p, int s, int e, int m){ assert(p); int k=0; srand(time(NULL)); for (int i=s; i<=e&... 阅读全文
posted @ 2013-03-26 22:06 windflying 阅读(493) 评论(0) 推荐(0)

摘要:摘自《Networking Programming for Microsoft Windows》第八章“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!从本质上说,完成端口模型要求我们创建一个Win32完成端口对象,通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。使用这种模型之前,首先要创建一个I/O完成端口对象,用它面向任意数量的套接字句柄,管理多个I/O请求。要做到这一点,需要调用CreateCompletionPort函数。该函数定义如下:HANDLE 阅读全文
posted @ 2013-03-26 15:28 windflying 阅读(863) 评论(0) 推荐(0)

摘要:如果当前系统中支持高分辨率计数器,我们可以使用 QueryPerformanceCounter 和 QueryPerformanceFrequency 进行高分辨率的计时。QueryPerformanceFrequency()类型:Win32API原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);作用:返回硬件支持的高精度计数器的频率。返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败函数QueryPerformanceCounter用于得到高精度计时器的值(如果存在这样的计时器)原型:BOOL QueryPe 阅读全文
posted @ 2013-03-26 14:33 windflying 阅读(5894) 评论(0) 推荐(0)

摘要:接上一篇,我们来看另一种实现临界区顺序访问的方法这次我们使用,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection,DeleteCriticalSection要使用这些需要包含windows.h并定义一个CRITICAL_SECTION变量那么这种方式与上一篇中用互斥量实现的方式有什么差别呢?下面是实现的代码:View Code #pragma once#include <windows.h>#include <assert.h>class CVCriSection{public: CVC 阅读全文
posted @ 2013-03-26 10:04 windflying 阅读(1330) 评论(0) 推荐(0)

摘要:所谓临界区就是同一时刻只能有一个线程访问的代码段。处于临界区的代码通常都是需要被多个线程访问,但又只能顺序访问的。一般就是共享的数据。用于实现顺序访问临界区的方式有多种,互斥量、信号量、事件都可以实现。下面的方式是采用互斥量实现一个类,比直接使用互斥量方便、直观。#include <stdio.h>#include <string.h>#include <stdlib.h>#ifndef WIN32 #include <pthread.h>#else#include <windows.h>#endif#ifdef WIN32typed 阅读全文
posted @ 2013-03-26 08:21 windflying 阅读(617) 评论(0) 推荐(0)

摘要:1 求三角形面积知道三角形三个顶点坐标,可以求三角形三条边长的长度,进而可以求出三角形的面积。海伦公式:假设三角形3条边长分别为a, b, c. p = (a + b + c) /2那么面积 s = sqrt( (p-a) * (p-b) * (p-c) * p );该公式的用途:可以用来计算面积,避免昂贵的三角函数计算。用来判断一个点是否在三角形内部。2 判断一个点是否在三角形内如上图,可以通过比较三角形ABC的面积(S1)与三角形ABD, ACD, BCD面积之和(S2)的大小来判断点是否在三角形内。如果S1等于S2,则点D在三角形内部。3 判断一个点p是否在一条射线ab的左边可以通过pa 阅读全文
posted @ 2013-03-20 22:40 windflying 阅读(663) 评论(0) 推荐(0)

摘要:提交代码前删除中间文件这是个好习惯,也应该成为一个强制要求。这有利于保持版本控制的干净整洁,保证控制的都是不可缺少的文件,没有那些没必要的中间文件。一个项目本来源码只有10M,可是加上编译产生的中间文件,以及一些临时文件,项目文件大小可能膨胀到100来M,显然这些都提交到SVN,对空间即带宽都是极大的浪费。怎么样保证没有中间文件提交到SVN呢?可以在每次提交前做一个检查,就是在项目文件中搜索这些中间文件:*.exe , *.bak, *.suo, *.user, Debug, Release, *.ncb, *.pdb等等,然后删除。未了确定你没有删除项目所必须的文件,可以把清理后的目录拷贝到 阅读全文
posted @ 2013-03-19 14:03 windflying 阅读(359) 评论(0) 推荐(1)

摘要:MD5算法简单的来说就是把任意长度的字串变换成固定长度(通常是128位)的16进制串。RFC 1321定义了MD5算法。该文档可从http://www.ietf.org/rfc/rfc1321.txt 获得。MD5的用途主要有:一致性验证。比如我们从网上下载了某个文件,网站上一般会给出该文件的MD5值,我们下载下来后,可以利用工具计算出新的MD5值,与正确的MD5值进行对照,如果不一样,则可以断定该文件下载出错或被篡改了。数字签名。可以用MD5算法对发布的程序或发布的消息生成MD5值作为签名等。密码存储。在传输过程中或存储过程中,直接用明文的密码都是很危险的。可以在传输之前先用MD5加密,存储 阅读全文
posted @ 2013-03-13 16:06 windflying 阅读(6715) 评论(0) 推荐(0)

摘要:什么是多线程多线程涉及到并行做某些事情,就像多进程一样。那么多线程与多进程有什么不同呢?当你正在一个电子表格上做计算的时候,可能在同一个桌面上有一个媒体播放器正在放着你喜欢的歌。这是一个两个进程并行工作的例子。一个进程运行电子表格程序。一个进程运行媒体播放器。这样的场景就是总所周知的多任务。近一步看媒体播放器,我们会发现在一个进程中某些事情正在并行的进行着。当媒体播放器正在发送音乐到声卡驱动时,用户界面也在不断的更新。这就是多线程所做的事情 – 单一进程中的并发性。并发性是怎么实现的呢?在单核CPU上的并行工作是一种错觉,就像电影不过时移动的图像一样。对于多进程,这种错觉是通过在一段非常短的时 阅读全文
posted @ 2013-03-12 16:39 windflying 阅读(292) 评论(0) 推荐(0)

摘要:注册元类型qRegisterMetaType<DVRDevUseRecords>("DVRDevUseRecords"); 类型 名字主要是在定义信号槽的时候,传递的参数类型不一定是QT所识别的,QT不识别的就要先注册以下,让QT能够认识,就是用qRegisterMetaType注册。信号和槽信号都是私有的,只能发送自己定义或继承的信号。Slot无论是公有的还是私有的,另一个对象都可以根据信号触发。公有槽可以像public function members一样被使用。只有对象内部才能产生信号吗?不是可以这样 emit p->signal()注意connec 阅读全文
posted @ 2013-03-12 14:44 windflying 阅读(658) 评论(0) 推荐(0)

摘要:用记事本打开.sln文件,把如下内容:MicrosoftVisualStudioSolutionFile,FormatVersion10.00#VisualStudio2008改为MicrosoftVisualStudioSolutionFile,FormatVersion9.00#VisualStudio2005另外用记事本打开.vcproj这样的文件,把Version="9.00改为Version="8.00这样就可以用vs2005打开了其它版本之间的转换可以用类似方法解决 阅读全文
posted @ 2013-03-08 15:02 windflying 阅读(328) 评论(0) 推荐(1)

摘要:目的本来是这样的:有两个线程A,B。A在某个循环中等待线程B中的某个事件发生。比如在一个网络运用中,A是主线程,B是接收线程。A发送了一个请求到服务器,然后等待服务器返回响应或超时重发,当B接收到响应时通知A。先看如下代码:int main(){ HANDLE hMutex = CreateMutex(NULL, FALSE, NULL); WaitForSingleObject(hMutex, INFINITE); return 0;}WaitForSingleObject总是立即返回,为什么WaitForSingleObject没有起作用??原来是我理解错了,范了个低级错... 阅读全文
posted @ 2013-03-07 14:55 windflying 阅读(904) 评论(0) 推荐(0)