目前日期文章:201312 (8)

瀏覽方式: 標題列表 簡短摘要

adt-bundle-windows-x86_64-20131030 用來開發 Android 4.0 以上的專案都沒啥問題,今天我拿書籍的範例光碟來編譯,卻出現 "Unable to Execute Dex: java.nio.BufferOverflowException" 的錯誤訊息。google 半天的結果,原來是內建的 Android SDK Build-tools (19) 有問題,只要換成新版的 19.0.1 或降版成 18.1.1 就 OK 了。

  1. 執行 Android SDK Manager
  2. 勾選 Tool → Android SDK Build-tools (19.0.1)
  3. 勾選 Tool → Android SDK Build-tools (19)
  4. 按下 Install packages... 執行安裝
  5. 按下 Delete packages... 執行卸載

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

Android SDK source code 自 4.0 以後都可以自 Android SDK Manager 直接下載,不用自己安裝 git, repo 等工具去下載。

  1. 打開 Android SDK Manager。
  2. 選擇要下載 Sources for Android SDK 版本(API 19),每一種版本都可以下載。
  3. 按下 Install packages.. 按鈕,執行下載。
  4. 下載資料會放在 adt-bundle-windows\sdk\sources\android-19,大小約 80MB 左右。

android-support-v4.jar 由於放在 Android Private Libraries,無法設定 Java Source Attachment,按 Ctrl+滑鼠左鍵無法直接讀取 Android SDK Sources。google 的結果只要新增一個檔案即可。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

格式

  • TS標準是 188Bytes
  • 日本的DVH-S格式是 192Bytes
  • 第三種的204Bytes則是在188Bytes的基礎上,加上16Bytes的FEC(前向糾錯)。

參考


台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  • 先執行 busybox init 程序
  • init 會先分析 /etc/inittab 檔案
  • inittab 中的 si::sysinit:/etc/init.d/rcS 表示開機執行的程序
  • rcS 只有一行 exec /etc/init.d/rc S
  • exec命令在執行時會把當前的shell process關閉,然後換到後面的命令繼續執行。也就是後面的指令都不會執行。
  • inittab 中的 l2:2:wait:/etc/init.d/rc 2 表示開機執行第二個程序
  • 所以總結總共會執行 /etc/init.d/rc S 及 /etc/init.d/rc 2.

新增開機程序可以使用 insserv,自己在 /etc/init.d 及 /etc/rc?.d 內新增腳本程序是不會動的,必須在 /etc/init.d/.depend.start 內的 TARGETS 也要新增才有用。

參考:http://blog.roodo.com/rocksaying/archives/19886844.html

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

下載頁面: http://developer.android.com/sdk

下載點有分 32bit 及 64bit,下載內容包含 Eclipse + ADT plugin,Android SDK Tools,Android Platform-tools,The latest Android platform,The latest Android system image for the emulator。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

json-c wiki: https://github.com/json-c/json-c/wiki

json-c download: https://s3.amazonaws.com/json-c_releases/releases/index.html

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

int pthread_setcancelstate(int state, int *oldstate);
  • 作用:設置可取消的狀態
  • PTHREAD_CANCEL_ENABLE: 線程取消請求將被傳遞。(預設值)
  • PTHREAD_CANCEL_DISABLE: 代表針對目標線程的取消請求將處於未决狀態(未決代表為不處理,但請求依然存在)。除非線程修改自己的狀態,否則不會被取消。
int pthread_setcanceltype(int state, int *oldstate);
  • 作用:設定線程接收到CANCEL信號的執行時間
  • PTHREAD_CANCEL_DEFFERED: 表示線程接收到CANCEL信號會執行到下一個取消點退出。(預設值)
  • PTHREAD_CANCEL_ASYCHRONOUS: 表示線程接收到CANCEL信號立即終止。
#include 
#include 
#include 

long long int count=0;

void *func(void *param)
{
//  pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
    printf("thread begin...\n");
    while (1) count++;
    printf("thread end...\n");
}

int main(int argc, char *argv[])
{
    int i;
    pthread_t thrid;

    // start thread
    if (pthread_create(&thrid, NULL, func, NULL)) {
        printf("pthread_create error\n");
        return -1;
    }

    // sleep
    for (i=0; i<5; i++) {
        sleep(1);
        printf("count=%lld\n", count);
    }

    // pthread cancel test
    if (!pthread_cancel(thrid)) printf( "pthread_cancel OK\n" );
    for (i=0; i<5; i++) {
        sleep(1);
        printf("count=%lld\n", count);
    }

    return 0;
}
執行結果
# ./a.out
thread begin...
count=25852274
count=54434882
count=85712448
count=116924962
count=139751253
pthread_cancel OK
count=139751253
count=139751253
count=139751253
count=139751253
count=139751253

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

pthread_cancel 用來停止 thread 有限制,以下的程式碼根本停不了,因為有沒有 Cancellation-point。

線程取消的方法是向目標線程發送 CANCEL 信號,但如何處理 Cancel 信號則由目標線程自己決定,或者忽略、或者立即終止、或者繼續運行至 Cancellation-point(取消點),由不同的 Cancellation 狀態決定。

線程接收到 CANCEL 信號的預設處理(即pthread_create()建立線程的預設狀態)是繼續執行至取消點,也就是說設置一個 CANCELED 狀態,線程繼續執行,只有執行至 Cancellation-point 的時候才會退出。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()