目前日期文章:201409 (5)

瀏覽方式: 標題列表 簡短摘要
  • Official ZXing ("Zebra Crossing") : link
  • dm77/barcodescanner: link
  • 透過ZXing讀取1D/2D barcode: link
  • Android ZXing 二维码、条形码扫描介绍: link
  • Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果: link
  • ZXing 开源中国社区: link
  • Getting Started Developing: link
  • zxing源码分析——QR码部分: link

zxing


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

今天安裝完 Guest Additions 後重開機卻出現錯誤 Starting VirtualBox Additions: error: VbglR3Init failed with rc=VERR_FILE_NOT_FOUND

google 了半天卻找不到解決辦法,只好另外 google uninstall 方法,再找其它安裝方法。

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

當 thread 設定 PTHREAD_CREATE_DETACHED 屬性時,thread 執行結束時不會保留返回值,會直接釋放所有資源並結束。當使用 pthread_join 一個 PTHREAD_CREATE_DETACHED 屬性的執行緒,會返回錯誤值,而且也得不到返回值。

#include 
#include 
#include 

void* thread_func(void *param)
{
    int i=0;
    int *running = (int*)param;
    printf("[%s:%d,%s]thread start\n", __FILE__, __LINE__, __func__);
    while(*running) {
        printf("[%s:%d,%s]%d\n", __FILE__, __LINE__, __func__, i++);
        sleep(1);
    }
    printf("[%s:%d,%s]thread stop\n", __FILE__, __LINE__, __func__);
    return (void*)123;
}

int main(int argc, char **argv)
{
    void *return_value=0;
    int running;
    pthread_t thrid;
    pthread_attr_t attr;

    running = 1;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    pthread_create(&thrid, &attr, thread_func, (void*)&running);
    pthread_attr_destroy(&attr);
    sleep(5);
    running = 0;
    pthread_join(thrid, &return_value);
    printf("[%s:%d,%s]%d\n", __FILE__, __LINE__, __func__, (int)return_value);
    sleep(1);
    return 0;
}
# ./a.out
[test.cpp:9,thread_func]thread start
[test.cpp:11,thread_func]0
[test.cpp:11,thread_func]1
[test.cpp:11,thread_func]2
[test.cpp:11,thread_func]3
[test.cpp:11,thread_func]4
[test.cpp:32,main]0
[test.cpp:14,thread_func]thread stop

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

一般正常使用 pthread_create 的執行緒,在執行結束時會保留返回值等待 pthread_join 呼叫傳回,也就是說執行緒所使用的資源會等到 pthread_join 才會被釋放。

#include 
#include 
#include 

void* thread_func(void *param)
{
    int i=0;
    int *running = (int*)param;
    printf("[%s:%d,%s]thread start\n", __FILE__, __LINE__, __func__);
    while(*running) {
        printf("[%s:%d,%s]%d\n", __FILE__, __LINE__, __func__, i++);
        sleep(1);
    }
    printf("[%s:%d,%s]thread stop\n", __FILE__, __LINE__, __func__);
    return (void*)123;
}

int main(int argc, char **argv)
{
    void *return_value;
    int running;
    pthread_t thrid;

    running = 1;
    pthread_create(&thrid, NULL, thread_func, (void*)&running);
    sleep(5);
    running = 0;
    pthread_join(thrid, &return_value);
    printf("[%s:%d,%s]%d\n", __FILE__, __LINE__, __func__, (int)return_value);
    return 0;
}
# ./a.out
[test.cpp:9,thread_func]thread start
[test.cpp:11,thread_func]0
[test.cpp:11,thread_func]1
[test.cpp:11,thread_func]2
[test.cpp:11,thread_func]3
[test.cpp:11,thread_func]4
[test.cpp:14,thread_func]thread stop
[test.cpp:28,main]123

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

#include 
#include 
#include 

class testClass
{
public:
    testClass();
    ~testClass();
private:
    static void *thread_func(void*);
    pthread_t thrid;
};

testClass::testClass()
{
printf("[%s:%d,%s]\n", __FILE__, __LINE__, __func__);
    pthread_create(&thrid, NULL, thread_func, this);
}

testClass::~testClass()
{
printf("[%s:%d,%s]\n", __FILE__, __LINE__, __func__);
    pthread_cancel(thrid);
    pthread_join(thrid, NULL);
}

void* testClass::thread_func(void *param)
{
    int i=0;
    testClass *self = (testClass*)param;
printf("[%s:%d,%s]thread start\n", __FILE__, __LINE__, __func__);
    while(1) {
        printf("[%s:%d,%s]%d\n", __FILE__, __LINE__, __func__, i++);
        sleep(1);
    }
printf("[%s:%d,%s]thread stop\n", __FILE__, __LINE__, __func__);
    return (void*)0;
}

int main(int argc, char **argv)
{
    testClass *test;
    test = new testClass();
    sleep(10);
    delete test;
    return 0;
}
# ./a.out
[test.cpp:18,testClass]
[test.cpp:33,thread_func]thread start
[test.cpp:35,thread_func]0
[test.cpp:35,thread_func]1
[test.cpp:35,thread_func]2
[test.cpp:35,thread_func]3
[test.cpp:35,thread_func]4
[test.cpp:35,thread_func]5
[test.cpp:35,thread_func]6
[test.cpp:35,thread_func]7
[test.cpp:35,thread_func]8
[test.cpp:35,thread_func]9
[test.cpp:24,~testClass]

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