summaryrefslogtreecommitdiff
path: root/retro_emu_thread.h
blob: 472ae8b6d5c7291fe3bdefa6b7a40d974fa8c204 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef EMU_THREAD_H
#define EMU_THREAD_H

#include "common.h"

/* gpSP doesn't have a top-level main loop that we can use, so instead we run it in its own thread
 * and switch between it and the main thread. Calling this function will block the current thread
 * and unblock the other.
 *
 * This function can be called from either the main or the emulation thread.
 */
void retro_switch_thread(void);

/* Initialize the emulation thread and any related resources.
 *
 * Only call this function from the main thread.
 */
bool retro_init_emu_thread(bool dynarec, u32 cycles);

/* Destroy the emulation thread and any related resources. Only call this after the emulation thread
 * has finished (or canceled) and joined.
 *
 * Only call this function from the main thread.
 */
void retro_deinit_emu_thread(void);

/* Returns true if the emulation thread was initialized successfully.
 *
 * This function can be called from either the main or the emulation thread.
 */
bool retro_is_emu_thread_initialized(void);

/* Join the emulation thread. The thread must have exited naturally or been canceled.
 *
 * Only call this function from the main thread.
 */
void retro_join_emu_thread(void);

/* Cancel the emulation thread.
 *
 * Only call this function from the main thread.
 */
void retro_cancel_emu_thread(void);

/* Returns true if the emulation thread has exited naturally.
 *
 * This function can be called from either the main or the emulation thread.
 */
bool retro_emu_thread_exited(void);

#endif