摘要:
刚学C的时候,遇到如下问题:scanf("%d", n);scanf("%c", ch);本来我应该要按两次回车输入才结束吧。可是每次我输入一个整数,然后按回车准备输入一个字符的时候,输入就结束了。这个问题郁闷了好久。书上也没讲。后来找到了方法,在scanf("%d", n)之后调用fflush(stdin)来刷新输入缓冲。再后来,看到了更好的解决方法:scanf("%d%*c", &n);scanf("%c", &ch);后来遇到了另一个问题scanf("%s&quo 阅读全文
摘要:
编译x264:下载最新版的x264ftp://ftp.videolan.org/pub/videolan/x264/snapshots/1.解压到指定的目录2.切换当前目录为该目录3.创建一个shell脚本build_x264.sh,内容如下:export NDK=/home/robin/桌面/android-ndk-r8cexport PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuiltexport PLATFORM=$NDK/platforms/android-8/arch-arm export PREFIX=/home 阅读全文
摘要:
下面是如何使用NDK工具的总体概况1 把你的代码等相关资源放在<project>/jni/...目录下2 创建<project>/jni/Android.mk文件,该文件用于向NDK构建系统描述本地资源3 需要的时候创建<project>/jni/Application.mk4 在你的工程目录运行 'ndk-build'脚本来编译你的原生代码。ndk-build位于顶层NDK目录cd <project><ndk>/ndk-build构建工具拷贝你的应用程序需要的,被裁剪过的动态库到应用程序目录的适当位置。5 最后,像通 阅读全文
摘要:
首先要装好并配置好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 :. 阅读全文
摘要:
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 阅读全文
摘要:
随机生成[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&... 阅读全文
摘要:
摘自《Networking Programming for Microsoft Windows》第八章“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!从本质上说,完成端口模型要求我们创建一个Win32完成端口对象,通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。使用这种模型之前,首先要创建一个I/O完成端口对象,用它面向任意数量的套接字句柄,管理多个I/O请求。要做到这一点,需要调用CreateCompletionPort函数。该函数定义如下:HANDLE 阅读全文
摘要:
如果当前系统中支持高分辨率计数器,我们可以使用 QueryPerformanceCounter 和 QueryPerformanceFrequency 进行高分辨率的计时。QueryPerformanceFrequency()类型:Win32API原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);作用:返回硬件支持的高精度计数器的频率。返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败函数QueryPerformanceCounter用于得到高精度计时器的值(如果存在这样的计时器)原型:BOOL QueryPe 阅读全文
摘要:
接上一篇,我们来看另一种实现临界区顺序访问的方法这次我们使用,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection,DeleteCriticalSection要使用这些需要包含windows.h并定义一个CRITICAL_SECTION变量那么这种方式与上一篇中用互斥量实现的方式有什么差别呢?下面是实现的代码:View Code #pragma once#include <windows.h>#include <assert.h>class CVCriSection{public: CVC 阅读全文
摘要:
所谓临界区就是同一时刻只能有一个线程访问的代码段。处于临界区的代码通常都是需要被多个线程访问,但又只能顺序访问的。一般就是共享的数据。用于实现顺序访问临界区的方式有多种,互斥量、信号量、事件都可以实现。下面的方式是采用互斥量实现一个类,比直接使用互斥量方便、直观。#include <stdio.h>#include <string.h>#include <stdlib.h>#ifndef WIN32 #include <pthread.h>#else#include <windows.h>#endif#ifdef WIN32typed 阅读全文