示例#1
0
文件: LCUI_Thread.c 项目: dwdcth/LCUI
Thread_TreeNode *
Thread_TreeNode_Add_New(Thread_TreeNode *ttn, thread_t tid)
/* 功能:在线程树中添加新的结点 */
{
	int temp = 0, i;
	LCUI_ID pos = 0;
	if(ttn->child.total_num > 0) {
		/* 先遍历数据,找未使用的空位 */
		for(i = 0; i < ttn->child.max_num; ++i) {
			if(ttn->child.queue[i] == NULL) {
				if(temp == 0) {
					temp = 1;
					pos = i;
				}
			}
			else if(ttn->child.queue[i]->tid == tid) {
				 /* 如果该线程ID一致 */
				return ttn->child.queue[i];
			}
		}
		ttn->child.total_num += 1; /* 增加该程序的总窗口数量 */ 
	} else {
		pos = 0;
		ttn->child.total_num = 1;
		ttn->child.max_num = ttn->child.total_num; 
		ttn->child.queue = (Thread_TreeNode**)calloc(1, 
				sizeof( Thread_TreeNode*));
		
		if(ttn->child.queue == NULL) {/* 如果申请内存失败 */ 
		//
			return NULL;
		}
		temp = 1;
	}
	
	if(temp == 0) {/* 如果没有空位,那就扩增内存 */ 
		pos = ttn->child.max_num;
		++ttn->child.max_num; 
		ttn->child.queue = (Thread_TreeNode**)realloc(ttn->child.queue, 
				ttn->child.max_num * sizeof(Thread_TreeNode*));
		if(ttn->child.queue == NULL) {/* 如果扩增内存失败 */
			return NULL;
		}
	}
	
	ttn->child.queue[pos] = (Thread_TreeNode*)calloc(1, sizeof(Thread_TreeNode));
	/* 以下需要初始化 */
	Thread_TreeNode_Init(ttn->child.queue[pos]);
	ttn->child.queue[pos]->tid = tid; /* 保存线程ID */
	ttn->child.queue[pos]->parent = ttn; /* 保存父线程的结点指针 */
	return ttn->child.queue[pos];
}
示例#2
0
static Thread_TreeNode *
ThreadTreeNode_AddNew( Thread_TreeNode *ttn, LCUI_Thread tid )
/* 功能:在线程树中添加新的结点 */
{
	Thread_TreeNode *new_ttn;
	
	new_ttn = malloc(sizeof(Thread_TreeNode));
	Thread_TreeNode_Init( new_ttn );
	new_ttn->tid = tid;
	new_ttn->parent = ttn;
	Queue_AddPointer(& ttn->child, new_ttn );
	return new_ttn;
}
示例#3
0
LCUIModule_Thread_Init( void )
{
	Thread_TreeNode_Init( &thread_tree ); /* 初始化根线程结点 */
	thread_tree.tid = LCUIThread_SelfID(); /* 当前线程ID作为根结点 */
	LCUI_Sys.self_id = thread_tree.tid; /* 保存线程ID */
}