

#include <nitro/os.h>
void OS_SleepThreadDirect( OSThread* thread, OSThreadQueue* queue );
thread |
Pointer to the thread to be stopped |
queue |
Pointer to the thread queue that registers the specified thread. If NULL, it is not registered to the thread queue. |
None.
Pauses the specified thread and registers it with the thread queue designated by queue.
When the OS_WakeupThread function is called with queue or the OS_WakeupThreadDirect function is called with thread, the thread will transition from the suspended state to the runnable state.
This function changes the thread state directly from outside without using specific signals, so extreme caution is necessary to avoid unexpected deadlock when used with a wait matrix or tasks involving a mutex. This function was created for a specialized purpose, so it should not be used on threads that call functions whose implementation details are unclear.
Example:
/* Low-priority thread that will be run first */ thread_1_proc()
{
critical_task();
}
/* High-priority thread that will be run later */
thread_2_proc()
{
OS_SleepThreadDirect(thread_1, NULL);
critical_task();
OS_WakeupThreadDirect(thread_1);
}
/* Task that will be run by both threads */
critical_task()
{
Processing that could cause a deadlock if run here:
- Mutual exclusion-related tasks (LockMutex, etc.)
- Tasks that may depend on thread execution because of wait matrices and so on (FS functions, etc.)
}
OS_InitThread
OS_CreateThread
OS_WakeupThread
OS_WakeupThreadDirect
OS_SleepThread
2007/12/03 Added a note.
2006/08/29 Added a note related to the method of use.
2006/08/16 Initial version.
CONFIDENTIAL