20 #ifndef _FX_PROCESS_H_ 21 #define _FX_PROCESS_H_ 27 #if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_LINUX_EMBEDDED_ || _FX_OS_ == _FX_ANDROID_ || _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_ 35 class CFX_ProcessContext;
36 class CFX_ThreadContext;
37 class CFX_ExceptionContext;
52 typedef struct _FX_SYSTEMTIME
95 typedef struct _FXCRT_DATETIMEZONE
150 #if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_ 263 #define FX_THREADPRIORITY_Lowest -2 265 #define FX_THREADPRIORITY_Lower -1 267 #define FX_THREADPRIORITY_Normal 0 269 #define FX_THREADPRIORITY_Higher 1 271 #define FX_THREADPRIORITY_Highest 2 280 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 281 typedef DWORD FX_ThreadResult;
282 # define THREAD_CALL_CONVENTION WINAPI 285 # define THREAD_CALL_CONVENTION 320 typedef struct _FX_THREADHANDLER
732 #define FXMT_SPLOCK_THIS CFX_SpinLock _fx_splock((FX_SPINLOCK*)this) 737 #define FXMT_SPLOCK_OBJ(lock) CFX_SpinLock _fx_splock(lock) 743 #define FXMT_SPLOCK_THIS 744 #define FXMT_SPLOCK_OBJ(lock) 843 class CFX_RWLockObject :
public CFX_Object
876 Init(pRWLock, nStatus);
880 Init(&pRWLockObj->m_Lock, nStatus);
884 if (!m_pRWLock || !m_nStatus)
return;
937 FX_RWLOCK* m_pRWLock;
940 void Init(FX_RWLOCK* pRWLock,
FX_INT32 nStatus)
942 m_pRWLock = pRWLock, m_nStatus = nStatus;
943 if (!m_pRWLock || !m_nStatus)
return;
952 #define FXMT_RWLOCK_THIS CFX_RWLock _fx_rwlock((CFX_RWLock*)this) 954 #define FXMT_RWLOCK_OBJ(lock, s) CFX_RWLock _fx_rwlock(lock, s) 956 #define FXMT_RWLOCK_DEFINEOBJ(rwLock, lock, s) CFX_RWLock rwLock(lock, s) 959 #define FXMT_RWLOCKOBJECT_DEFINE(rwLockObj) CFX_RWLockObject rwLockObj 961 #define FXMT_RWLOCKOBJECT_TRYREADLOCK(lockObj) (lockObj)->TryReadLock() 963 #define FXMT_RWLOCKOBJECT_TRYREADLOCK_IF(lockObj) if ((lockObj)->TryReadLock()) 965 #define FXMT_RWLOCKOBJECT_READLOCK(lockObj) (lockObj)->ReadLock() 967 #define FXMT_RWLOCKOBJECT_READUNLOCK(lockObj) (lockObj)->ReadUnlock() 969 #define FXMT_RWLOCKOBJECT_TRYWRITELOCK(lockObj) (lockObj)->TryWriteLock() 971 #define FXMT_RWLOCKOBJECT_TRYWRITELOCK_IF(lockObj) if ((lockObj)->TryWriteLock()) 973 #define FXMT_RWLOCKOBJECT_WRITELOCK(lockObj) (lockObj)->WriteLock() 975 #define FXMT_RWLOCKOBJECT_WRITEUNLOCK(lockObj) (lockObj)->WriteUnlock() 980 #define FXMT_RWLOCK_THIS 981 #define FXMT_RWLOCK_OBJ(lock, s) 982 #define FXMT_RWLOCK_DEFINEOBJ(rwLock, lock, s) 984 #define FXMT_RWLOCKOBJECT_DEFINE(rwLockObj) 985 #define FXMT_RWLOCKOBJECT_TRYREADLOCK(lockObj) 986 #define FXMT_RWLOCKOBJECT_TRYREADLOCK_IF(lockObj) 987 #define FXMT_RWLOCKOBJECT_READLOCK(lockObj) 988 #define FXMT_RWLOCKOBJECT_READUNLOCK(lockObj) 989 #define FXMT_RWLOCKOBJECT_TRYWRITELOCK(lockObj) 990 #define FXMT_RWLOCKOBJECT_TRYWRITELOCK_IF(lockObj) 991 #define FXMT_RWLOCKOBJECT_WRITELOCK(lockObj) 992 #define FXMT_RWLOCKOBJECT_WRITEUNLOCK(lockObj) 1038 FX_INT64
FX_Atom_Add64(
volatile FX_INT64* pAddend, FX_INT64 nIncrement);
FX_THREADHANDLER * FX_Thread_GetHandler()
获取当前线程处理器。
在非线程模式下,定义为空实现。
Definition: fx_process.h:979
void FX_Thread_Yield()
将处理器让出给另一个线程。
FX_BOOL FX_Mutex_TryLock(FX_MUTEX *pMutex)
尝试锁定一个互斥量。
FX_INT32 FX_Thread_WaitForMultipleThreads(const FX_HTHREAD *pThreads, FX_INT32 nCount)
等待多个线程终止。
void * FX_LPVOID
指向任意类型的指针。
Definition: fx_system.h:654
void FX_Time_GetLocalTime(FX_SYSTEMTIME *pSystemTime)
获取当前本地日期和时间。
FX_BOOL FX_SpinLock_Initialize(FX_SPINLOCK *pSpinLock)
初始化自旋锁。
FX_BOOL FX_Mutex_Initialize(FX_MUTEX *pMutex)
初始化一个互斥量。
void FX_Thread_SetLastError(FX_INT32 nErr)
设置当前线程中的最后错误代码。
void FX_Thread_SetPrivateData(FX_LPVOID key, FX_LPVOID data, PD_CALLBACK_FREEDATA callback)
设置当前线程中的私有数据。
void FX_Thread_SetPriority(FX_HTHREAD hThread, FX_INT32 nPriority)
设置线程优先级。
FX_INT32 FX_Atom_Add32(volatile FX_INT32 *pAddend, FX_INT32 nIncrement)
增加32位整数值。
FX_WORD day
月中的日,从1到31。
Definition: fx_process.h:102
FX_BOOL FX_RWLock_TryReadLock(FX_RWLOCK *pRWLock)
尝试锁定以进行共享读取。
unsigned long FX_DWORD
32位无符号整数。
Definition: fx_system.h:726
FX_INT64 FX_Atom_Add64(volatile FX_INT64 *pAddend, FX_INT64 nIncrement)
增加64位整数值。
FX_INT32 FX_Thread_GetPriority(FX_HTHREAD hThread)
获取线程优先级。
FX_DWORD FX_PROCESSID
进程ID。
Definition: fx_process.h:155
CFX_ThreadContext * FX_Thread_GetContext()
获取当前线程上下文。
FX_INT32 FX_Atom_Subtract32(volatile FX_INT32 *pAddend, FX_INT32 nDecrement)
减少32位整数值。
void(* PD_CALLBACK_FREEDATA)(FX_LPVOID pData)
Definition: fx_basic.h:3232
FX_BOOL FX_RWLock_Initialize(FX_RWLOCK *pRWLock)
初始化读写锁。
FX_WORD milliseconds
毫秒,从0到999。PDF标准现在不支持,如果不适用可以省略此字段。
Definition: fx_process.h:112
应用程序扩展的线程处理器。
Definition: fx_process.h:320
void FX_RWLock_ReadUnlock(FX_RWLOCK *pRWLock)
解锁以进行共享读取。
CRITICAL_SECTION FX_MUTEX
互斥锁/临界区和读写锁的定义。
Definition: fx_system.h:1600
FX_WORD year
年,四位数字,如2014。
Definition: fx_process.h:98
void FX_Process_Initialize()
初始化进程。
日期和时间结构。
Definition: fx_process.h:95
void FX_RWLock_Destroy(FX_RWLOCK *pRWLock)
销毁一个读写锁。
FX_WORD second
秒,从0到60。60表示闰秒。
Definition: fx_process.h:110
在非线程模式下,定义为空实现。
Definition: fx_process.h:742
FX_BOOL FX_SpinLock_IsLocked(FX_SPINLOCK *pSpinLock)
确定指定的自旋锁是否被锁定。
int FX_INT32
32位有符号整数。
Definition: fx_system.h:683
FX_INT64 FX_Atom_Subtract64(volatile FX_INT64 *pAddend, FX_INT64 nDecrement)
减少64位整数值。
FX_PROCESSID FX_Process_GetID()
获取当前进程ID
void FX_RWLock_WriteLock(FX_RWLOCK *pRWLock)
锁定以进行独占写入。
FX_LPVOID FX_Thread_GetPrivateData(FX_LPVOID key)
获取当前线程中的私有数据。
int FX_BOOL
布尔变量(应为TRUE或FALSE)。
Definition: fx_system.h:691
void FX_Time_GetSystemTime(FX_SYSTEMTIME *pSystemTime)
获取当前系统日期和时间。
CFX_ExceptionContext * FX_Thread_GetExceptionContext()
获取当前线程异常上下文。
void FX_Thread_SetHandler(FX_THREADHANDLER *pThreadHandler)
设置当前线程处理器。
FX_LPVOID pUserData
指向用户数据的指针。
Definition: fx_process.h:323
FX_WORD tzMinute
时区的分钟,从0到59。
Definition: fx_process.h:120
FX_BOOL FX_RWLock_TryWriteLock(FX_RWLOCK *pRWLock)
尝试锁定以进行独占写入。
void FX_Process_RemovePrivateData(FX_LPVOID key)
移除当前进程中的私有数据。
void * FX_SPINLOCK
自旋锁的定义。
Definition: fx_system.h:1631
void FX_Mutex_Destroy(FX_MUTEX *pMutex)
销毁一个互斥量。
FX_WORD hour
小时,从0到23。
Definition: fx_process.h:106
FX_LPVOID FX_Process_GetPrivateData(FX_LPVOID key)
获取当前进程中的私有数据。
FX_ThreadResult(WINAPI * FX_CALLBACK_ThreadProxyProc)(FX_CALLBACK_ThreadProc threadProc, FX_LPVOID param)
线程代理过程的回调函数。
Definition: fx_process.h:306
void FX_SpinLock_Destroy(FX_SPINLOCK *pSpinLock)
销毁一个自旋锁。
FX_DWORD FX_Time_Sleep(FX_DWORD dwMilliseconds)
延迟当前运行指定的毫秒数。
void FX_SpinLock_Lock(FX_SPINLOCK *pSpinLock)
锁定一个自旋锁。
void FX_Mutex_Unlock(FX_MUTEX *pMutex)
解锁一个互斥量。
FX_INT32 FX_Thread_GetLastError()
获取当前线程中的最后错误代码。
FX_WORD dayOfWeek
星期几,从0到6。PDF标准现在不支持,如果不适用可以省略此字段。
Definition: fx_process.h:104
void FXCRT_GetCurrentSystemTime(FXCRT_DATETIMEZONE &dt)
获取当前系统日期、时间和时区信息。
FX_WORD minute
分钟,从0到59。
Definition: fx_process.h:108
FX_ThreadResult(WINAPI * FX_CALLBACK_ThreadProc)(FX_LPVOID param)
线程过程的回调函数。
Definition: fx_process.h:295
void FX_Mutex_Lock(FX_MUTEX *pMutex)
锁定一个互斥量。
void FX_SpinLock_Unlock(FX_SPINLOCK *pSpinLock)
解锁一个自旋锁。
FX_HTHREAD FX_Thread_Create(FX_INT32 nPriority, size_t szStack, FX_CALLBACK_ThreadProc threadProc, FX_LPVOID param)
创建一个新线程。
void FX_Thread_RemovePrivateData(FX_LPVOID key)
移除当前线程中的私有数据。
unsigned short FX_WORD
16位无符号整数。
Definition: fx_system.h:677
CFX_ProcessContext * FX_Process_GetContext()
获取进程上下文。
void FX_Process_SetPrivateData(FX_LPVOID key, FX_LPVOID data, PD_CALLBACK_FREEDATA callback)
设置当前进程中的私有数据。
void FX_Process_Finalize()
结束进程。
FX_BOOL FX_SpinLock_TryLock(FX_SPINLOCK *pSpinLock)
尝试锁定一个自旋锁。
void FX_RWLock_WriteUnlock(FX_RWLOCK *pRWLock)
解锁以进行独占写入。
#define NULL
空指针值。
Definition: fx_system.h:792
#define FX_DEFINEHANDLE(name)
定义句柄类型的宏。
Definition: fx_system.h:772
FX_HTHREAD FX_Thread_GetHandle()
获取当前线程句柄。
FX_INT32 tzHour
时区的小时,从-12到12。
Definition: fx_process.h:118
void FX_RWLock_ReadLock(FX_RWLOCK *pRWLock)
锁定以进行共享读取。
FX_INT32 FX_Thread_WaitForSingleThread(FX_HTHREAD hThread)
等待单个线程终止。
void FX_Thread_Exit()
退出当前线程。
FX_WORD month
月,从1到12。
Definition: fx_process.h:100
系统时间结构。
Definition: fx_process.h:52
FX_DWORD FX_Time_GetClock()
获取调用进程已消耗的时钟周期。