1. 程式人生 > 其它 >rtt建立任務後執行緒何時執行

rtt建立任務後執行緒何時執行

void demo_thread_creat(void)
{
    rt_err_t result;

    /* 建立靜態執行緒 : 優先順序 16 ,時間片 2個系統滴答 */
    result = rt_thread_init(&thread_test1,
                            "test1",
                            test1_thread_entry, RT_NULL,
                            (rt_uint8_t*)&thread1_stack[0], sizeof
(thread1_stack), 15, 2); if (result == RT_EOK) { rt_thread_startup(&thread_test1); } /* 建立靜態執行緒 : 優先順序 15 ,時間片 1個系統滴答 */ result = rt_thread_init(&thread_test2, "test2", test2_thread_entry, RT_NULL, (rt_uint8_t
*)&thread2_stack[0], sizeof(thread2_stack), 15, 1); if (result == RT_EOK) { rt_thread_startup(&thread_test2); } } void test1_thread_entry(void* parameter) { rt_uint32_t i; /* 排程器上鎖,上鎖後,將不再切換到其他執行緒,僅響應中斷 */ rt_enter_critical(); g_tmp = 0; rt_kprintf("g_tmp=:%d \r\n
", g_tmp); for(i=0; i<10000; i++) { g_tmp++; } rt_kprintf("g_tmp=:%d \r\n", g_tmp); /* 排程器解鎖 */ rt_exit_critical(); } void test2_thread_entry(void* parameter) { rt_thread_delay(1);// 1 g_tmp++; }

demo_thread_creat函式執行完了,執行緒test1_thread_entry才回執行(當初認為執行rt_thread_startup(&thread_test1)後,執行緒test1_thread_entry會立即執行)。執行緒想執行的話,需要被排程後才能執行。如果執行緒的優先順序夠高的話,會立刻執行,否則需等待排程器排程。

如果,感到此時的自己很辛苦,那告訴自己:容易走的都是下坡路。堅持住,因為你正在走上坡路,走過去,你就一定會有進步。如果,你正在埋怨命運不眷顧,開導自己:命,是失敗者的藉口;運,是成功者的謙詞。命運從來都是掌握在自己的手中,埋怨,只是一種懦弱的表現;努力,才是人生的態度。