コード例 #1
0
ファイル: main.c プロジェクト: yydaor/LCUI
/* 获取程序ID */
LCUI_API LCUI_ID
LCUIApp_GetSelfID( void )
{
	LCUI_App *app;
	app = LCUIApp_GetSelf();
	if( app == NULL ) {
		return 0;
	}
	return (LCUI_ID)app->id;
}
コード例 #2
0
ファイル: main.c プロジェクト: yydaor/LCUI
/* 注册终止函数,以在LCUI程序退出时调用 */
LCUI_API int
LCUIApp_AtQuit( void (*callback_func)(void) )
{
	LCUI_App *app;
	app = LCUIApp_GetSelf();
	if( app == NULL || callback_func == NULL ) {
		return -1;
	}
	app->func = callback_func;
	return 0;
}
コード例 #3
0
ファイル: main.c プロジェクト: yydaor/LCUI
/* 退出程序 */
static int LCUIApp_Quit(void)
{
	LCUI_App *app;
	app = LCUIApp_GetSelf();
	if( !app ) {
		printf("%s (): %s", __FUNCTION__, APP_ERROR_UNRECORDED_APP);
		return -1;
	} 
	LCUIAppList_Delete(app->id); 
	/* 如果程序列表为空,就退出LCUI */  
	if (Queue_Empty(&LCUI_Sys.app_list)) {
		LCUI_Quit();
	}
	return 0;
}
コード例 #4
0
ファイル: task.c プロジェクト: 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;
}
コード例 #5
0
ファイル: main.c プロジェクト: yydaor/LCUI
/* 运行目标循环 */
LCUI_API int
LCUI_MainLoop_Run( LCUI_MainLoop *loop )
{
	LCUI_App *app;
	int idle_time = 1;
#ifdef LCUI_BUILD_IN_WIN32
	MSG msg;
#endif
	app = LCUIApp_GetSelf();
	if( !app ) {
		printf("%s(): %s", __FUNCTION__, APP_ERROR_UNRECORDED_APP);
		return -1;
	}
	DEBUG_MSG("loop: %p, enter\n", loop);
	loop->running = TRUE;
	while( !loop->quit && LCUI_Sys.state == ACTIVE ) {
		if( LCUIApp_HaveTask(app) ) {
			idle_time = 1;
			LCUIApp_RunTask( app ); 
		} else {
			LCUI_MSleep (idle_time);
			if (idle_time < MAX_APP_IDLE_TIME) {
				idle_time += 1;
			}
		}
#ifdef LCUI_BUILD_IN_WIN32
		if( PeekMessage( &msg, Win32_GetSelfHWND(), 0, 0, PM_REMOVE) ) {
			TranslateMessage (&msg) ;
			DispatchMessage (&msg) ;
		}
#endif
	}
	loop->running = FALSE;
	DEBUG_MSG("loop: %p, exit\n", loop);
	return 0;
}