/** * @file kc_threads.h * @brief スレッドモジュールヘッダファイル * @copyright 2020 - 2024 Nomura Kei * @depends * kc.h */ #ifndef KC_THREADS_H #define KC_THREADS_H #include <kc.h> #if (KC_IS_WINDOWS) #include <kc_threads_win.h> #else #include <threads.h> #endif // KC_IS_WINDOWS #ifdef __cplusplus extern "C" { namespace kc { using namespace std; #endif typedef struct KcThread_ { /** * 指定されたスレッドが生きているか否かを返します。 * * @param thread 対象スレッド * @return true/false (スレッドが生存している/していない) */ bool (*is_alive)(struct KcThread_ *thread); /** * スレッドを開始します。 * * @param thread 対象スレッド * @param args スレッドに渡す情報 * @return true/false (スレッド起動成功/失敗) */ bool (*start)(struct KcThread_ *thread, void *args); /** * スレッドが終了するのを待機します。 * * @param thread 対象スレッド */ bool (*join)(struct KcThread_ *thread); /** * Thread 管理情報 */ void *_info; } KcThread; /** * スレッドを生成します。 * * @param run スレッドにて実行する関数へのポインタ */ KcThread *KcThread_new(int (*run)(void *args)); /** * Thread を破棄します。 * * @param thread 破棄するスレッド */ void KcThread_delete(KcThread *thread); /** * 指定された ms 間現在のスレッドをスリープさせます。 * * @param time スリープさせるミリ秒数 * @param force true の場合、シグナルにより割り込まれた場合でも継続してスリープします。 * @return true/false (成功/中断された) */ bool KcThread_msleep(long time, bool force); /** * 指定された sec 秒 + nsec ナノ秒間現在のスレッドをスリープさせます。 * * @param sec スリープさせる秒数 * @param nsec スリープさせるナノ秒数 * @param force true の場合、シグナルにより割り込まれた場合でも継続してスリープします。 * @return true/false (成功/中断された) */ bool KcThread_sleep(long sec, long nsec, bool force); #ifdef __cplusplus } // namespace kc } // extern "C" #endif #endif // KC_THREADS_H