📄 icthread.h
字号:
/************************************************************************//* SISCO SOFTWARE MODULE HEADER *****************************************//************************************************************************//* (c) Copyright Systems Integration Specialists Company, Inc., *//* 1996 - 2002, All Rights Reserved. *//* *//* PROPRIETARY AND CONFIDENTIAL *//* *//* MODULE NAME : icthread.h *//* PRODUCT(S) : ICCP functions to control multiple threads *//* *//* *//* *//* MODIFICATION LOG : *//* Date Who Rev Comments *//* -------- --- ------ ------------------------------------------- *//* 02/07/02 EJV 6 _AIX: Added threads support. *//* 10/27/00 nav 5 Change bThreadsEnabled to ST_BOOLEAN *//* 02/10/00 nav 4 Allow for thread support/no support in same *//* _WIN32 .lib *//* 03/04/99 nav 3 Allow for WIN32 multi threads *//* 05/19/98 nav 2 incorporate BNM changes *//* 01/17/97 nav 1 debug options using DEBUG_THREADS *//* 12/06/96 nav created *//************************************************************************/#ifndef ICTHREADS_INCLUDED#define ICTREADS_INCLUDED#ifndef SD_SUCCESS#define SD_SUCCESS 0#define SD_FAILURE 1#endif/* global variable for cancelling a timer */extern icTimerId gIcTimerID;#ifdef SISCO_THREADS#ifndef _ICSDKT_H#include "icsdkt.h" #endifint icSiscoCreateSem(void);int icSiscoLockSem(void);int icSiscoUnlockSem(void);int icSiscoUnlockReturn(int status);int icSiscoDestroySem(void);/* compile with DEBUG_THREADS defined to help track who called lock routines */#ifdef DEBUG_THREADSint icSiscoTestCreateSem(char* fileName, int lineNum);int icSiscoTestLockSem(char* fileName, int lineNum);int icSiscoTestUnlockSem(char* fileName, int lineNum);int icSiscoTestUnlockReturn(int status, char* fileName, int lineNum);int icSiscoTestDestroySem(char* fileName, int lineNum);#define IC_CREATE_SEM icSiscoTestCreateSem(__FILE__, __LINE__)#define IC_LOCK_SEM icSiscoTestLockSem(__FILE__, __LINE__)#define IC_UNLOCK_SEM icSiscoTestUnlockSem(__FILE__, __LINE__)#define IC_UNLOCK_RETURN(a) icSiscoTestUnlockReturn(a, __FILE__, __LINE__)#define IC_DESTROY_SEM icSiscoTestDestroySem(__FILE__, __LINE__)#else#define IC_CREATE_SEM icSiscoCreateSem()#define IC_LOCK_SEM icSiscoLockSem() #define IC_UNLOCK_SEM icSiscoUnlockSem()#define IC_UNLOCK_RETURN(a) icSiscoUnlockReturn(a)#define IC_DESTROY_SEM icSiscoDestroySem()#endif /* end DEBUG_THREADS */#else#define IC_CREATE_SEM SD_SUCCESS#define IC_LOCK_SEM SD_SUCCESS#define IC_UNLOCK_SEM SD_SUCCESS#define IC_UNLOCK_RETURN(a) a#define IC_DESTROY_SEM SD_SUCCESS#endif /* end SISCO_THREADS */#if defined (SISCO_THREADS) && (defined (__alpha) || defined(_AIX))#define _POSIX_C_SOURCE 199506L#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 199506L)/*****************//* POSIX 1003.1c *//*****************/#define IC_PTHREAD_MUTEX_INIT(mutex_ptr, mutex_attr_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutex_init (mutex_ptr, mutex_attr_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_INIT error %d.", rtnval);\ } \ }#define IC_PTHREAD_MUTEX_LOCK(mutex_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutex_lock (mutex_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_LOCK error %d.", rtnval); \ } \ }#define IC_PTHREAD_MUTEX_UNLOCK(mutex_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutex_unlock (mutex_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_UNLOCK error %d.", rtnval); \ } \ }#define IC_PTHREAD_MUTEX_DESTROY(mutex_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutex_destroy (mutex_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_DESTROY error %d.", rtnval); \ } \ }#define IC_PTHREAD_MUTEXATTR_INIT(mutexattr_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutexattr_init (mutexattr_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEXATTR_INIT error %d.", rtnval); \ } \ }#define IC_PTHREAD_MUTEXATTR_DESTROY(mutexattr_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutexattr_destroy (mutexattr_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEXATTR_DESTROY error %d.", rtnval); \ } \ }#define IC_PTHREAD_MUTEXATTR_SETTYPE_NP(mutexattr_ptr, type, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutexattr_settype_np (mutexattr_ptr, type); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEXATTR_SETTYPE_NP error %d.", rtnval); \ } \ }#else/*****************//* POSIX 1003.4a *//*****************/#define IC_PTHREAD_MUTEX_INIT(mutex_ptr, mutex_attr_ptr, rtnval) \ { \ rtnval = 0; \ if (mutex_attr_ptr == NULL) \ { \ rtnval = pthread_mutex_init (mutex_ptr, pthread_mutexattr_default); \ } \ else \ { \ rtnval = pthread_mutex_init(mutex_ptr, *((pthread_mutexattr_t *)mutex_attr_ptr)); \ } \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_INIT error %d.", errno); \ } \ }#define IC_PTHREAD_MUTEX_LOCK(mutex_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutex_lock (mutex_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_LOCK error %d.", errno); \ } \ }#define IC_PTHREAD_MUTEX_UNLOCK(mutex_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutex_unlock (mutex_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_UNLOCK error %d.", errno); \ } \ }#define IC_PTHREAD_MUTEX_DESTROY(mutex_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutex_destroy (mutex_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEX_DESTROY error %d", errno); \ } \ }#define IC_PTHREAD_MUTEXATTR_INIT(mutexattr_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutexattr_create (mutexattr_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEXATTR_INIT error %d.", rtnval); \ } \ }#define IC_PTHREAD_MUTEXATTR_DESTROY(mutexattr_ptr, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutexattr_delete (mutexattr_ptr); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEXATTR_DESTROY error %d.", rtnval); \ } \ }#define IC_PTHREAD_MUTEXATTR_SETTYPE_NP(mutexattr_ptr, type, rtnval) \ { \ rtnval = 0; \ rtnval = pthread_mutexattr_setkind_np (mutexattr_ptr, type); \ if (rtnval != 0) \ { \ slog (sLogCtrl, 0, thisFileName, __LINE__, \ "IC_PTHREAD_MUTEXATTR_SETTYPE_NP error %d", rtnval); \ } \ }#endif /* #if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 199506L) */#endif /* SISCO_THREADS */#if defined (SISCO_THREADS) && defined (_WIN32)extern ST_BOOLEAN bThreadsEnabled;#endif#endif /* #ifndef ICTHREADS_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -