#define USER_THREAD_PRIORITY_AUDIO (8) #define USER_THREAD_PRIORITY_FILEACCESS (12) #define USER_THREAD_PRIORITY_DATADECOMP (24) : /* ユーザーマルチスレッドモデルでADX2を使う場合の各種サーバー処理 */ /* Various server threads used in the user-multithread model of ADX2 */ static void app_audio_process(void *arg) { (void)arg; /* CRI ADX2 オーディオ処理 */ /* Audio processing by CRI ADX2 */ criAtomEx_ExecuteAudioProcess(); } 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ハンドルの作成 */ /* ボイスプールの作成 プレーヤーの作成とステータス取得 */ : : /* 各処理用のスレッドを作成 */ /* 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); } }