diff --git a/include/rtthread.h b/include/rtthread.h index b8809474f641c637343f7802d6b06cde5e5b3b35..d719e4bfb4ed67a569e9b0fb87b87e0ae8e52267 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -156,7 +156,8 @@ void rt_thread_timeout(void *parameter); #ifdef RT_USING_HOOK void rt_thread_suspend_sethook(void (*hook)(rt_thread_t thread)); -void rt_thread_resume_sethook(void (*hook)(rt_thread_t thread)); +void rt_thread_resume_sethook (void (*hook)(rt_thread_t thread)); +void rt_thread_inited_sethook (void (*hook)(rt_thread_t thread)); #endif /* diff --git a/src/thread.c b/src/thread.c index ec7bfdefbde9e01ce71b1108d190b2de54b48b07..0eef331d52188701a442c52b6501df006c77d688 100644 --- a/src/thread.c +++ b/src/thread.c @@ -48,7 +48,9 @@ extern rt_list_t rt_thread_defunct; #ifdef RT_USING_HOOK static void (*rt_thread_suspend_hook)(rt_thread_t thread); -static void (*rt_thread_resume_hook)(rt_thread_t thread); +static void (*rt_thread_resume_hook) (rt_thread_t thread); +static void (*rt_thread_inited_hook) (rt_thread_t thread); + /** * @ingroup Hook * This function sets a hook function when the system suspend a thread. @@ -61,6 +63,7 @@ void rt_thread_suspend_sethook(void (*hook)(rt_thread_t thread)) { rt_thread_suspend_hook = hook; } + /** * @ingroup Hook * This function sets a hook function when the system resume a thread. @@ -73,6 +76,18 @@ void rt_thread_resume_sethook(void (*hook)(rt_thread_t thread)) { rt_thread_resume_hook = hook; } + +/** + * @ingroup Hook + * This function sets a hook function when a thread is initialized. + * + * @param hook the specified hook function + */ +void rt_thread_inited_sethook(void (*hook)(rt_thread_t thread)) +{ + rt_thread_inited_hook = hook; +} + #endif void rt_thread_exit(void) @@ -162,6 +177,8 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread, 0, RT_TIMER_FLAG_ONE_SHOT); + RT_OBJECT_HOOK_CALL(rt_thread_inited_hook,(thread)); + return RT_EOK; }