Doubango runnable使用方法
来源:互联网 发布:2016淘宝代销赚钱吗 编辑:程序博客网 时间:2024/05/22 06:50
Doubango runnable笔记
下面是关于runnable的测试用例,解释了runnable的使用方法。runnable实现了这样一种机制: 启动runnable后,即启动一个线程,在线程运行上下文中处理放入runnable中的链表中的对象。 放入对象的线程上下文是调用runnable的线程(一般是主线程)。其中,runnable有个属性important, 意思就是:
“if yes, the thread will not be joined until all data in the queue have been consumed. default value: tsk_false”
#ifndef _TEST_RUNNABLE_H_#define _TEST_RUNNABLE_H_typedef struct test_runnable_timer_s{tsk_timer_id_t id;uint64_t timeout;const char *arg;}test_runnable_timer_t;test_runnable_timer_t runnable_timers[] ={{0, 2000,"3"},{1, 2500,"4"},{2, 500,"1"},{3, 1000,"2"},{4, 1000,"2"},{5, 0,"0"},{6, 10000,"6"},{7, 3000,"5"},{8, 2500,"4"},};
// 对象声明,该对象作为runnable处理的对象,被放入runnable内的链表中typedef struct tsk_obj_s{TSK_DECLARE_OBJECT;tsk_timer_id_t timer_id;}tsk_obj_t;
// 对象定义类需要的构造函数、析构函数、比较函数等,参见Doubango的C语言实现对象式编程原理static void* tsk_obj_ctor(void * self, va_list * app){tsk_obj_t *obj = self;if(obj){obj->timer_id = va_arg(*app, tsk_timer_id_t);}return self;}static void* tsk_obj_dtor(void * self) { return self; }static int tsk_obj_cmp(const void *obj1, const void *obj2){ return 0;}// 对象定义类声明static const tsk_object_def_t tsk_obj_def_s = {sizeof(tsk_obj_t),tsk_obj_ctor, tsk_obj_dtor,tsk_obj_cmp, };const tsk_object_def_t *tsk_obj_def_t = &tsk_obj_def_s;// runable的执行函数void *run(void* self){int i = 0;tsk_list_item_t *curr;// 这里开始进行循环,等待信号灯(通过这种方式可以将链表中对象全部处理完)TSK_RUNNABLE_RUN_BEGIN(self);// 从链表中取出对象,进行处理(这里只是打印),释放对象if(curr = TSK_RUNNABLE_POP_FIRST(self)){const tsk_obj_t *obj = (const tsk_obj_t*)curr->data;printf("\n\nRunnable event-id===>[%llu]\n\n", obj->timer_id);tsk_object_unref(curr);}// 循环结束TSK_RUNNABLE_RUN_END(self);return 0;}// 定时器回调函数,将timer_id放入runnable对象中的链表中static int test_runnable_timer_callback(const void* arg, tsk_timer_id_t timer_id){const tsk_runnable_t* runnable = arg;if(runnable){// 将timer_id放入runnable对象中的链表中,并给(升起)信号灯TSK_RUNNABLE_ENQUEUE(runnable, timer_id);return 0;}return -1;}void test_runnable(){size_t i;tsk_timer_manager_handle_t *timer_mgr = tsk_timer_manager_create();tsk_runnable_t* runnable = tsk_runnable_create(); //创建一个runnable对象runnable->run = run;printf("test_runnable//\n");tsk_timer_manager_start(timer_mgr);tsk_runnable_start(runnable, tsk_obj_def_t); // 初始化runnable,启动一个线程,开始执行run函数for(i=0; i<sizeof(runnable_timers)/sizeof(test_runnable_timer_t); ++i){runnable_timers[i].id = tsk_timer_manager_schedule(timer_mgr, runnable_timers[i].timeout, test_runnable_timer_callback, runnable);}tsk_thread_sleep(4000);/* Stops and frees both timer manager and runnable object */TSK_OBJECT_SAFE_FREE(runnable); // 释放runnable对象,在其析构函数中会调用tsk_runnable_stop,会等待runnable线程结束TSK_OBJECT_SAFE_FREE(timer_mgr); }
- Doubango runnable使用方法
- Doubango代码学习(五):runnable
- Runnable使用方法
- Doubango
- doubango
- Callable、Runnable、Future、Executor的详细使用方法
- Runnable类使用方法+与Thread区别
- Doubango 入门
- doubango简介
- doubango日志
- doubango简介
- Runnable
- Runnable
- runnable
- Android 开发中的 Handler ,Thread ,Message ,Runnable 的综合使用方法
- Android开发笔记: Runnable,Handler ,Thread的使用方法
- java之多线程中Thread类和Runnable接口使用方法
- doubango tinyDEMO 编译
- android基础(Activity)
- 7系列主板 规格对比
- WinForm程序中两份mdf文件问题的解决
- jQuery相关知识整理(一)
- K-d树
- Doubango runnable使用方法
- strust2.1.8+spring+hibernate整合技术(一)
- HDF 1072
- IPD和IPD-CMM
- 如何使结束线程2个方法
- sqlserver2008 + team foundation server 2008 sp1
- 对等网络(P2P)中主流分布式哈希算法比较分析
- linux安装vmTools
- 7 款基于 JavaScript/AJAX 的文件上传插件