📄 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 + -