/************************************************************************
 * AUTHOR: NiuJiuRu
 * FILENAME: swthrd.h
 * DESCRIPTION: 线程操作
 * NOTE:
 * HISTORY:
 * 1, [2010-09-07] created by NiuJiuRu
 ***********************************************************************/
#ifndef __SWTHRD_H__
#define __SWTHRD_H__

// thread's default satck size
#define THREAD_DEFAULT_STACK_SIZE 65536

// thread's default priority
#define THREAD_DEFAULT_PRIORITY 50

#ifdef __cplusplus
extern "C"
{
#endif

/* 线程的(用户)回调函数, 会被反复调用("返回值 < 0"时表示退出线程; "返回值 >= 0"表示延时一段时间(ms)后继续运行) */
typedef int (*PThrdProc)(unsigned long wParam, unsigned long lParam);

/* 创建线程, 成功后默认处于暂停状态 */
void *sw_thrd_create(const char *name, int priority, int stack_size, PThrdProc proc,
					 unsigned long wParam, unsigned long lParam);

/* 销毁线程, 在"wait time <= timout(ms)"前尝试安全的关闭线程, "wait time > timout"后则强制关闭 */
void sw_thrd_destroy(void *hThrd, int timeout);

/* 暂停运行线程 */
void sw_thrd_pause(void *hThrd);

/* 继续运行线程 */
void sw_thrd_resume(void *hThrd);

/* 延时(毫秒) */
void sw_thrd_delay(int ms);

/* 检查线程是否还存在 */
bool sw_thrd_isAlive(void *hThrd);

/* 检查线程是否正在运行: true = 是, false = 否 */
bool sw_thrd_isRunning(void *hThrd);

/* 检查线程是否正在执行(用户)回调函数还没有返回: true = 是, false = 否 */
bool sw_thrd_isBusy(void *hThrd);

/* 设置线程名称 */
bool sw_thrd_setName(void *hThrd, const char *name);

/* 取得线程名称 */
char *sw_thrd_getName(void *hThrd, char *name);

/* 设置线程优先级 */
bool sw_thrd_setPriority(void *hThrd, int priority);

/* 取得线程优先级 */
int sw_thrd_getPriority(void *hThrd);

/* 设置线程执行的(用户)回调函数 */
bool sw_thrd_setProc(void *hThrd, PThrdProc proc, unsigned long wParam, unsigned long lParam);

/* 取得线程执行的(用户)回调函数 */
void sw_thrd_getProc(void *hThrd, PThrdProc *proc, unsigned long *wParam, unsigned long *lParam);

#ifdef __cplusplus
}
#endif

#endif  /* __SWTHRD_H__ */
