Function ctru_sys::threadCreate

source ·
pub unsafe extern "C" fn threadCreate(
    entrypoint: ThreadFunc,
    arg: *mut c_void,
    stack_size: usize,
    prio: c_int,
    core_id: c_int,
    detached: bool
) -> Thread
Expand description

Creates a new libctru thread.


  • entrypoint - The function that will be called first upon thread creation
  • arg - The argument passed to entrypoint
  • stack_size - The size of the stack that will be allocated for the thread (will be rounded to a multiple of 8 bytes)
  • prio - Low values gives the thread higher priority. For userland apps, this has to be within the range [0x18;0x3F]. The main thread usually has a priority of 0x30, but not always. Use svcGetThreadPriority() if you need to create a thread with a priority that is explicitly greater or smaller than that of the main thread.
  • core_id - The ID of the processor the thread should be ran on. Processor IDs are labeled starting from 0. On Old3DS it must be <2, and on New3DS it must be <4. Pass -1 to execute the thread on all CPUs and -2 to execute the thread on the default CPU (read from the Exheader).
  • detached - When set to true, the thread is automatically freed when it finishes.


The libctru thread handle on success, NULL on failure.

  • Processor #0 is the application core. It is always possible to create a thread on this core.
  • Processor #1 is the system core. If APT_SetAppCpuTimeLimit is used, it is possible to create a single thread on this core.
  • Processor #2 is New3DS exclusive. Normal applications can create threads on this core if the exheader kernel flags bitmask has 0x2000 set.
  • Processor #3 is New3DS exclusive. Normal applications cannot create threads on this core.
  • Processes in the BASE memory region can always create threads on processors #2 and #3.

Note: Default exit code of a thread is 0. svcExitThread should never be called from the thread, use threadExit instead.