Newer
Older
libkc / modules / include / kc_threads.h
Nomura Kei on 29 May 2024 2 KB update
  1. /**
  2. * @file kc_threads.h
  3. * @brief スレッドモジュールヘッダファイル
  4. * @copyright 2020 - 2024 Nomura Kei
  5. * @depends
  6. * kc.h
  7. */
  8. #ifndef KC_THREADS_H
  9. #define KC_THREADS_H
  10.  
  11. #include <kc.h>
  12.  
  13. #if (KC_IS_WINDOWS)
  14. #include <kc_threads_win.h>
  15. #else
  16. #include <threads.h>
  17. #endif // KC_IS_WINDOWS
  18.  
  19. #ifdef __cplusplus
  20. extern "C"
  21. {
  22. namespace kc
  23. {
  24. using namespace std;
  25. #endif
  26.  
  27. typedef struct KcThread_
  28. {
  29.  
  30. /**
  31. * 指定されたスレッドが生きているか否かを返します。
  32. *
  33. * @param thread 対象スレッド
  34. * @return true/false (スレッドが生存している/していない)
  35. */
  36. bool (*is_alive)(struct KcThread_ *thread);
  37.  
  38. /**
  39. * スレッドを開始します。
  40. *
  41. * @param thread 対象スレッド
  42. * @param args スレッドに渡す情報
  43. * @return true/false (スレッド起動成功/失敗)
  44. */
  45. bool (*start)(struct KcThread_ *thread, void *args);
  46.  
  47. /**
  48. * スレッドが終了するのを待機します。
  49. *
  50. * @param thread 対象スレッド
  51. */
  52. bool (*join)(struct KcThread_ *thread);
  53.  
  54. /**
  55. * Thread 管理情報
  56. */
  57. void *_info;
  58.  
  59. } KcThread;
  60.  
  61. /**
  62. * スレッドを生成します。
  63. *
  64. * @param run スレッドにて実行する関数へのポインタ
  65. */
  66. KcThread *KcThread_new(int (*run)(void *args));
  67.  
  68. /**
  69. * Thread を破棄します。
  70. *
  71. * @param thread 破棄するスレッド
  72. */
  73. void KcThread_delete(KcThread *thread);
  74.  
  75. /**
  76. * 指定された ms 間現在のスレッドをスリープさせます。
  77. *
  78. * @param time スリープさせるミリ秒数
  79. * @param force true の場合、シグナルにより割り込まれた場合でも継続してスリープします。
  80. * @return true/false (成功/中断された)
  81. */
  82. bool KcThread_msleep(long time, bool force);
  83.  
  84. /**
  85. * 指定された sec 秒 + nsec ナノ秒間現在のスレッドをスリープさせます。
  86. *
  87. * @param sec スリープさせる秒数
  88. * @param nsec スリープさせるナノ秒数
  89. * @param force true の場合、シグナルにより割り込まれた場合でも継続してスリープします。
  90. * @return true/false (成功/中断された)
  91. */
  92. bool KcThread_sleep(long sec, long nsec, bool force);
  93.  
  94. #ifdef __cplusplus
  95. } // namespace kc
  96. } // extern "C"
  97. #endif
  98. #endif // KC_THREADS_H