/* 获取指向程序数据的指针 */ LCUI_API LCUI_App* LCUIApp_GetSelf( void ) { LCUI_Thread id; id = LCUIThread_SelfID(); /* 获取本线程ID */ if(id == LCUI_Sys.display_thread || id == LCUI_Sys.dev_thread || id == LCUI_Sys.self_id || id == LCUI_Sys.timer_thread ) {/* 由于内核及其它线程ID没有被记录,只有直接返回LCUI主程序的线程ID了 */ return LCUIApp_Find((LCUI_ID)LCUI_Sys.self_id); } id = LCUIThread_GetRootThreadID( id ); return LCUIApp_Find( (LCUI_ID)id ); }
/* * 功能:发送任务给程序,使这个程序进行指定任务 * 说明:LCUI_Task结构体中的成员变量 id,保存的是目标程序的id */ LCUI_API int AppTasks_Add( LCUI_Task *task ) { LCUI_App *app; app = LCUIApp_Find( task->id ); if( !app ) { return -1; } Queue_Lock( &app->tasks ); if(Queue_Add( &app->tasks, task ) < 0 ) { Queue_Unlock( &app->tasks ); return -2; } LCUISleeper_BreakSleep( &app->mainloop_sleeper ); Queue_Unlock( &app->tasks ); return 0; }
/* * 功能:使用自定义方式添加程序任务 * 用法示例: * 在函数的各参数与队列中的函数及各参数不重复时,添加它 * AppTasks_CustomAdd(ADD_MODE_NOT_REPEAT | AND_ARG_F | AND_ARG_S, task); * 只要函数和参数1不重复则添加 * AppTasks_CustomAdd(ADD_MODE_NOT_REPEAT | AND_ARG_F, task); * 要函数不重复则添加 * AppTasks_CustomAdd(ADD_MODE_NOT_REPEAT, task); * 添加新的,不管是否有重复的 * AppTasks_CustomAdd(ADD_MODE_ADD_NEW, task); * 有相同函数则覆盖,没有则新增 * AppTasks_CustomAdd(ADD_MODE_REPLACE, task); * */ LCUI_API int AppTasks_CustomAdd( int mode, LCUI_Task *task ) { int ret; LCUI_App *app; if( task->id == (LCUI_ID)0 ) { app = LCUIApp_GetSelf(); } else { app = LCUIApp_Find( task->id ); } if( !app ) { return -1; } ret = Tasks_CustomAdd( &app->tasks, mode, task ); if( ret == 0 ) { LCUISleeper_BreakSleep( &app->mainloop_sleeper ); } return ret; }