CRI ADX  Last Updated: 2024-07-17 10:48 p
在用户多重线程模型中实现

示例目录

/cri/pc/samples/criatomex/user_multithread_framework


示例描述

如果要在用户自己创建的线程中运行Atom运行库的Server处理,请执行以下操作。
  • 在初始化程序库时指定线程模型和用户多重线程模型。
  • 创建线程并在线程上定期执行Server处理函数。
#define USER_THREAD_PRIORITY_AUDIO (8)
#define USER_THREAD_PRIORITY_FILEACCESS (12)
#define USER_THREAD_PRIORITY_DATADECOMP (24)
/* 在用户多重线程模型中执行使用ADX的各种Server处理 */
/* Various server threads used in the user-multithread model of ADX */
static void app_audio_process(void *arg)
{
(void)arg;
/* CRI ADX音频处理 */
/* Audio processing by CRI ADX */
}
static void app_file_access_process(void *arg)
{
(void)arg;
/* CRI File System文件访问(读取)处理 */
/* 从此线程调用加载完成回调 */
/* File processing (read-in) by CRI File System */
/* The load completion callback function is invoked from this thread. */
criFs_ExecuteFileAccess();
}
static void app_data_decomp_process(void *arg)
{
(void)arg;
/* CRI File System 数据展开处理*/
/* Data decompression processing by CRI File System */
criFs_ExecuteDataDecompression();
}
void Sample_Initialize(void)
{
/* 指定用户多重线程模型 */
/* Specify user multithread mode */
criAtomEx_SetDefaultConfig(&criatomex_config);
criatomex_config.thread_model = CRIATOMEX_THREAD_MODEL_USER_MULTI;
/* 初始化程序库 */
/* Library initialization */
smputl_initialize(&criatomex_config, NULL, 0);
:
:
/* 创建D-Bas、读取并注册ACF文件 */
/* 读取ACB文件并创建ACB句柄 */
/* 创建Voice池 创建Player并获取状态 */
:
:
/* 为每个处理创建线程 */
/* Create a thread for each processing */
{
CriUint32 thread_work_size;
thread_work_size = userThread_CalculateWorkSize();
/* 分配线程的工作区 */
/* Allocate thread work area */
user_audio_thread_work = user_alloc_func(NULL, thread_work_size);
user_file_access_thread_work = user_alloc_func(NULL, thread_work_size);
user_data_decomp_thread_work = user_alloc_func(NULL, thread_work_size);
/* 在与CRI Atom运行库的初始化相同的线程上执行音频处理 */
user_audio_thread = userThread_Create(
user_audio_thread_work, thread_work_size,
app_audio_process, app_obj, USER_THREAD_PRIORITY_AUDIO, 0);
user_file_access_thread = userThread_Create(
user_file_access_thread_work, thread_work_size,
app_file_access_process, app_obj, USER_THREAD_PRIORITY_FILEACCESS, THREAD_AFFINITY_CORE2);
user_data_decomp_thread = userThread_Create(
user_data_decomp_thread_work, thread_work_size,
app_data_decomp_process, app_obj, USER_THREAD_PRIORITY_DATADECOMP, THREAD_AFFINITY_CORE2);
}
}
#define criAtomEx_SetDefaultConfig(p_config)
Assign the default values to the configuration structure used for the library's initialization.
Definition: cri_le_atom_ex.h:322
void criAtomEx_ExecuteAudioProcess(void)
Execute the server processing for user multithreading.
@ CRIATOMEX_THREAD_MODEL_USER_MULTI
User multithreading
Definition: cri_le_atom_ex.h:1269
注意
使用criAtomEx_ExecuteMain函数执行Server处理时,在函数中发生文件读取完成的待命,函数中的处理将被锁定数个V(1个V为一次垂直同步)的时间。
使用用户多重线程模型时,请在主线程上只执行criAtomEx_ExecuteAudioProcess函数,并在其他线程上执行criFs_ExecuteFileAccess函数和criFs_ExecuteDataDecompression函数。


示例使用的数据中AtomCraft项目的目录

/cri/tools/criatomex/examples/tutorial_data_for_runtime