?? test_key_buffer.c
字號:
/************************************************************ Copyright (C), 2007,DTK Computer. FileName: test_key_buffer.c Author: rome Version : 1.0.0 Date:2007.03.23 Description: 測試鍵盤緩沖操作,主要測試競爭條件的處理。 Version: DTK-EMMI-1.0.0 Function List: 1.test_regular_get_and_put:測試鍵盤緩沖對象的正常讀寫。 2.regular_get_buffer:配合test_regular_get_and_put函數的讀操作。 3.test_multi_get:測試多個讀者一個寫者的情況。 4.loop_get:配合test_multi_get函數的循環讀操作函數。 History: <author> <time> <version > <desc> rome 2007/03/23 1.0.0 build this moudle ***********************************************************/#include <assert.h>#include <stdio.h>#include <unistd.h>#include <key_buffer.h>#include <mmi_lock.h>#define KEY_BUFFER_READWRITE_LEN 20KeyBuffer *key_buffer;static void test_regular_get_and_put(void);static void *regular_get_buffer(void *user_data);static void test_multi_get(void);static void *loop_get(void *user_data);int main(void){ key_buffer = key_buffer_new(); test_regular_get_and_put(); test_multi_get(); return 0;}static void test_regular_get_and_put(void){ int i; mmi_thread_t test_get_thread; if (mmi_thread_create(&test_get_thread, NULL, regular_get_buffer, NULL)) { printf("test_regular_get_and_put: create thread error\n"); return; } for (i=0; i<KEY_BUFFER_READWRITE_LEN; i++) { key_buffer_put(key_buffer, 'a' + i); /* 當鍵盤緩沖可能滿時作延遲操作,以便讀線程可以先把數據讀走 */ if (i >= 15 - 1) /* 16 是 KEY_BUFFER_LEN */ { sleep(2); } } mmi_thread_join(test_get_thread, NULL); assert(key_buffer_is_empty(key_buffer) != 0); printf("%p thread test regular get/put success\n", mmi_thread_self());}static void *regular_get_buffer(void *user_data){ int i; for (i=0; i<KEY_BUFFER_READWRITE_LEN; i++) { char ch; ch = key_buffer_get(key_buffer, 0); printf("the char is %c, the i is %d\n", ch, i); assert(ch == ('a' + i)); } printf("%p thread buffer get success\n", mmi_thread_self()); return NULL;}static void test_multi_get(void){ int i; int timeout = 0; mmi_thread_t loop_thread[3]; for (i=0; i<3; i++) { if (2 == i) { timeout = 1; } if (mmi_thread_create(&loop_thread[i], NULL, loop_get, &timeout)) { printf("test_multi_get: create thread error\n"); return; } } for (i=0; i<KEY_BUFFER_READWRITE_LEN; i++) { key_buffer_put(key_buffer, 'a' + i); if (i == KEY_BUFFER_READWRITE_LEN - 1) { i = -1; sleep(3); } }}static void *loop_get(void *user_data){ int ch; while(1) { ch = key_buffer_get(key_buffer, (int)(*(int *)user_data)); printf("loop_get: %p thread get the char %c\n", mmi_thread_self(), ch); if (0xFFFF == ch) { printf("loop_get: %p thread get the ##timeout## %x\n", mmi_thread_self(), ch); } } return NULL;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -