Esempio n. 1
0
File: main.c Progetto: yydaor/LCUI
/* 获取指向程序数据的指针 */
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 );
}
Esempio n. 2
0
File: task.c Progetto: fshunj/LCUI
/*
 * 功能:发送任务给程序,使这个程序进行指定任务
 * 说明: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;
}
Esempio n. 3
0
File: task.c Progetto: fshunj/LCUI
/*
 * 功能:使用自定义方式添加程序任务
 * 用法示例:
 * 在函数的各参数与队列中的函数及各参数不重复时,添加它
 * 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;
}