VXItrd.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:10k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. /************************************************************************
  23.  *
  24.  *
  25.  * Thread API
  26.  *
  27.  * API for basic thread operations and locks. Unlike most of the other
  28.  * VXI APIs, this is implemented in a library (on Windows a DLL with a
  29.  * specific name, on other operating systems as a static, shared, or
  30.  * dynamic library). Implementations of this API are operating system
  31.  * dependant.
  32.  *
  33.  * To avoid cyclic dependancies, this does not perform logging. Clients
  34.  * must do error logging themselves based on passed return codes.
  35.  *
  36.  ************************************************************************
  37.  */
  38. #ifndef _VXITRD_H
  39. #define _VXITRD_H
  40. #include "VXItypes.h"                  /* For VXIint, VXIbool, etc.  */
  41. #include "VXIheaderPrefix.h"
  42. #ifdef VXITRD_EXPORTS
  43. #define VXITRD_API SYMBOL_EXPORT_DECL
  44. #else
  45. #define VXITRD_API SYMBOL_IMPORT_DECL
  46. #endif
  47. #ifdef __cplusplus
  48. extern "C" {
  49. #endif
  50. #ifdef __cplusplus
  51. struct VXItrdMutex;
  52. struct VXItrdThread;
  53. struct VXItrdTimer;
  54. #else
  55. typedef struct VXItrdMutex   { void * dummy; } VXItrdMutex;
  56. typedef struct VXItrdThread  { void * dummy; } VXItrdThread;
  57. typedef struct VXItrdTimer   { void * dummy; } VXItrdTimer;
  58. #endif
  59.  /**
  60.   * defgroup VXItrd Thread library
  61.   *
  62.   * C function library for basic mutex, thread, and timer
  63.   * functionality to ensure portability across a wide variety of
  64.   * operating systems and integration models (multi-threaded,
  65.   * multi-process, etc.).
  66.   */
  67. /*@{*/
  68. /** 
  69.  * Function signature invoked on the new thread by VXItrdThreadCreate( ),
  70.  * and the argument to that function.
  71.  */
  72. typedef void * VXItrdThreadArg;
  73. #ifdef WIN32
  74. typedef VXItrdThreadArg (__stdcall *VXItrdThreadStartFunc)(
  75.                            VXItrdThreadArg userData);
  76. #define VXITRD_DEFINE_THREAD_FUNC(funcName, userData) 
  77.   VXItrdThreadArg __stdcall funcName(VXItrdThreadArg userData)
  78. #else
  79. typedef VXItrdThreadArg (*VXItrdThreadStartFunc)(
  80.   VXItrdThreadArg userData);
  81. #define VXITRD_DEFINE_THREAD_FUNC(funcName, userData) 
  82.   VXItrdThreadArg funcName(VXItrdThreadArg userData)
  83. #endif
  84. /**
  85.  * Result codes for functions
  86.  * 
  87.  * Result codes less then zero are severe errors (likely to be
  88.  * platform faults), those greater then zero are warnings (likely to
  89.  * be application issues) 
  90.  */
  91. typedef enum VXItrdResult {
  92.   /* Fatal error, terminate call    */
  93.   VXItrd_RESULT_FATAL_ERROR       =  -100, 
  94.   /* I/O error                      */
  95.   VXItrd_RESULT_IO_ERROR           =   -8,
  96.   /* Out of memory                  */
  97.   VXItrd_RESULT_OUT_OF_MEMORY      =   -7, 
  98.   /* System error, out of service   */
  99.   VXItrd_RESULT_SYSTEM_ERROR       =   -6, 
  100.   /* Errors from platform services  */
  101.   VXItrd_RESULT_PLATFORM_ERROR     =   -5, 
  102.   /* Return buffer too small        */
  103.   VXItrd_RESULT_BUFFER_TOO_SMALL   =   -4, 
  104.   /* Property name is not valid    */
  105.   VXItrd_RESULT_INVALID_PROP_NAME  =   -3, 
  106.   /* Property value is not valid   */
  107.   VXItrd_RESULT_INVALID_PROP_VALUE =   -2, 
  108.   /* Invalid function argument      */
  109.   VXItrd_RESULT_INVALID_ARGUMENT   =   -1, 
  110.   /* Success                        */
  111.   VXItrd_RESULT_SUCCESS            =    0,
  112.   /* Normal failure, nothing logged */
  113.   VXItrd_RESULT_FAILURE            =    1,
  114.   /* Non-fatal non-specific error   */
  115.   VXItrd_RESULT_NON_FATAL_ERROR    =    2, 
  116.   /* Operation is not supported     */
  117.   VXItrd_RESULT_UNSUPPORTED        =  100
  118. } VXItrdResult;
  119. /**
  120.  * Create a mutex
  121.  *
  122.  * @param  mutex  Handle to the created mutex
  123.  *
  124.  * @return        VXItrdResult 0 on success
  125.  */
  126. VXITRD_API VXItrdResult VXItrdMutexCreate(VXItrdMutex **mutex);
  127. /**
  128.  * Destroy a mutex
  129.  *
  130.  * @param  mutex  Handle to the mutex to destroy
  131.  *
  132.  * @return        VXItrdResult 0 on success
  133.  */
  134. VXITRD_API VXItrdResult VXItrdMutexDestroy(VXItrdMutex **mutex);
  135. /**
  136.  * Lock a mutex
  137.  *
  138.  * @param  mutex  Handle to the mutex to lock
  139.  *
  140.  * @return        VXItrdResult 0 on success
  141.  */
  142. VXITRD_API VXItrdResult VXItrdMutexLock(VXItrdMutex *mutex);
  143. /**
  144.  * Unlock a Mutex
  145.  *
  146.  * @param  mutex  Handle to the mutex to unlock
  147.  *
  148.  * @return        VXItrdResult 0 on success
  149.  */
  150. VXITRD_API VXItrdResult VXItrdMutexUnlock(VXItrdMutex *mutex);
  151. /**
  152.  * Create a thread
  153.  *
  154.  * Note thread values are not supported on some older operating
  155.  * systems (such as IBM OS/2). Execution starts on the thread
  156.  * immediately. To pause execution use a mutex between the thread and
  157.  * the thread creator.
  158.  *
  159.  * @param  thread       Handle to the thread that is created
  160.  * @param  startFunc    Function for the thread to start execution on
  161.  * @param  arg          Argument to the thread function
  162.  *  
  163.  * @return              VXItrdResult 0 on success
  164.  */
  165. VXITRD_API VXItrdResult VXItrdThreadCreate(VXItrdThread          **thread,
  166.    VXItrdThreadStartFunc   startFunc,
  167.    VXItrdThreadArg         arg);
  168. /**
  169.  * Destroy a thread handle
  170.  *
  171.  * Note: this does NOT stop or destroy the thread, it just releases
  172.  * the handle for accessing it. If this is not done, a memory leak
  173.  * occurs, so if the creator of the thread never needs to communicate
  174.  * with the thread again it should call this immediately after the
  175.  * create if the create was successful.
  176.  *
  177.  * @param  thread  Handle to the thread to destroy
  178.  *
  179.  * @return VXItrdResult 0 on success 
  180.  */
  181. VXITRD_API VXItrdResult VXItrdThreadDestroyHandle(VXItrdThread **thread);
  182. /**
  183.  * Terminate a thread (called by the thread to exit)
  184.  *
  185.  * @param  status    Exit value of the thread
  186.  *
  187.  * @return           N/A, never returns
  188.  */
  189. VXITRD_API void VXItrdThreadExit(VXItrdThreadArg status);
  190. /**
  191.  * Wait for the termination of a specified thread
  192.  *
  193.  * @param  thread   Handle to the thread to wait for
  194.  * @param  status   Set to the exit value of the thread's start routine
  195.  * @param  timeout  Timeout, in milliseconds, for waiting for the thread
  196.  *                  to exit, pass -1 to wait forever
  197.  *
  198.  * @return VXItrdResult 0 on success, VXItrd_RESULT_FAILURE on timeout 
  199.  */
  200. VXITRD_API VXItrdResult VXItrdThreadJoin(VXItrdThread *thread,
  201.  VXItrdThreadArg *status,
  202.  long timeout);
  203. /**
  204.  * Get the thread ID for the specified thread
  205.  *
  206.  * @param  thread   Handle to the thread to get the ID for
  207.  *
  208.  * @return   Thread ID number
  209.  */
  210. VXITRD_API VXIthreadID VXItrdThreadGetIDFromHandle(VXItrdThread *thread);
  211. /**
  212.  * Get the thread ID for the current thread
  213.  *
  214.  * @return   Thread ID number
  215.  */
  216. VXITRD_API VXIthreadID VXItrdThreadGetID(void);
  217. /**
  218.  * Yield execution of the current thread to other threads/processes
  219.  *
  220.  * @return   N/A, no return value, always succeeds
  221.  *
  222.  */
  223. VXITRD_API void VXItrdThreadYield(void);
  224. /**
  225.  * Create a timer
  226.  *
  227.  * @param  timer   Handle to the created timere
  228.  *
  229.  * @return         VXItrdResult 0 on success
  230.  */
  231. VXITRD_API VXItrdResult VXItrdTimerCreate(VXItrdTimer **timer);
  232. /**
  233.  * Destroy a timer
  234.  *
  235.  * @param  timer   Handle to the timer to destroy
  236.  *
  237.  * @return         VXItrdResult 0 on success
  238.  */
  239. VXITRD_API VXItrdResult VXItrdTimerDestroy(VXItrdTimer **timer);
  240. /**
  241.  * Suspend the current thread for a time period using a timer
  242.  *
  243.  * Note: due to other activities of the machine, the delay may be greater
  244.  * then the configured duration.
  245.  *
  246.  * @param  timer        Handle to the timer to use to execute the suspend
  247.  * @param  sleepMs      Duration to sleep, in milliseconds
  248.  * @param  interrupted  Pointer indicating whether or not the sleep was 
  249.  *                      interrupted by VXItrdTimerWake, TRUE if interrupted,
  250.  *                      FALSE if not. Pass NULL if this information is not 
  251.  *                      desired.
  252.  * 
  253.  * @return              VXItrdResult 0 on success
  254.  */
  255. VXITRD_API VXItrdResult VXItrdTimerSleep(VXItrdTimer *timer,
  256.  VXIint       sleepMs,
  257.  VXIbool     *interrupted);
  258. /**
  259.  * Wakes a thread that is sleeping on a timer
  260.  *
  261.  * Note: if no thread is currently waiting on the specified timer, the
  262.  * next VXItrdTimerSleep( ) call on that timer will immediately wake
  263.  * up.
  264.  *
  265.  * @param  timer        Handle to the timer to wake up
  266.  * 
  267.  * @return              VXItrdResult 0 on success
  268.  */
  269. VXITRD_API VXItrdResult VXItrdTimerWake(VXItrdTimer *timer);
  270. /**
  271.  * Initialize the TRD utilities library
  272.  *
  273.  * @param threadStackSize  Stack size to use when creating new threads.
  274.  *                         Pass 0 to use the default (OS-specific) size,
  275.  *                         usually this means new threads will use the
  276.  *                         same stack size as the main (parent) process.
  277.  *
  278.  * @return VXItrd_RESULT_SUCCESS if sucess, different value on failure
  279.  */
  280. VXITRD_API VXItrdResult VXItrdInit(VXIint32 threadStackSize);
  281. /**
  282.  * Shutdown the TRD utilities library
  283.  *
  284.  * @return VXItrd_RESULT_SUCCESS if sucess, different value on failure
  285.  */
  286. VXITRD_API VXItrdResult VXItrdShutDown(void);
  287. /*@}*/
  288. #ifdef __cplusplus
  289. }
  290. #endif
  291. #include "VXIheaderSuffix.h"
  292. #endif  /* include guard */