Newer
Older
libkc / modules / include / kc_threads.h
Nomura Kei on 29 May 2 KB update
/**
 * @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