home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: WPS_PM / WPS_PM.zip / xfld085s.zip / helpers / threads.h < prev    next >
C/C++ Source or Header  |  1999-02-23  |  4KB  |  134 lines

  1.  
  2. /*
  3.  * threads.h:
  4.  *      header file for treads.c, which
  5.  *      contains helper functions for creating, destroying, and
  6.  *      synchronizing threads.
  7.  *
  8.  *      Copyright (C) 1997-99 Ulrich Möller.
  9.  *      This file is part of the XFolder source package.
  10.  *      XFolder is free software; you can redistribute it and/or modify
  11.  *      it under the terms of the GNU General Public License as published
  12.  *      by the Free Software Foundation, in version 2 as it comes in the
  13.  *      "COPYING" file of the XFolder main distribution.
  14.  *      This program is distributed in the hope that it will be useful,
  15.  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  *      GNU General Public License for more details.
  18.  */
  19.  
  20. #if __cplusplus
  21. extern "C" {
  22. #endif
  23.  
  24. #ifndef THREADS_HEADER_INCLUDED
  25.     #define THREADS_HEADER_INCLUDED
  26.  
  27.     /* thread info structure passed to secondary threads */
  28.     typedef struct _THREADINFO {
  29.             // data maintained by thr* functions
  30.             ULONG   cb;
  31.             ULONG   ulData;
  32.             BOOL    fExit;
  33.             // data to be maintained by secondary thread
  34.             HAB     hab;
  35.             TID     tid;
  36.             BOOL    fExitComplete;
  37.             ULONG   ulResult;
  38.             ULONG   ulFuncInfo;
  39.     } THREADINFO, *PTHREADINFO;
  40.  
  41.     typedef void (_Optlink THREADFUNC) (void*);
  42.     typedef THREADFUNC *PTHREADFUNC;
  43.  
  44.     /*
  45.      * thrCreate:
  46.      *      this function creates a THREADINFO structure in *ppti;
  47.      *      you must pass the thread function in pfn, which will
  48.      *      then be executed. The thread will be passed a pointer
  49.      *      to the new THREADINFO structure as its thread parameter.
  50.      *      The ulData field in that structure is set to ulData
  51.      *      here. Use whatever you like.
  52.      *      Note: As opposed to previous versions, V0.84 now expects
  53.      *      *pfn to have _Optlink calling convention, because now
  54.      *      _beginthread() is used instead of DosCreateThread().
  55.      */
  56.  
  57.     BOOL thrCreate(PTHREADINFO *ppti, PTHREADFUNC pfn, ULONG ulData);
  58.  
  59.     /*
  60.      * thrClose:
  61.      *      this functions sets a thread's "Close" flag to
  62.      *      TRUE; the thread should monitor this flag
  63.      *      periodically and then terminate itself.
  64.      */
  65.  
  66.     BOOL thrClose(PTHREADINFO pti);
  67.  
  68.  
  69.     /*
  70.      * thrGoodbye:
  71.      *      every thread should call this function just before
  72.      *      it terminates itself so that the other thread funcs
  73.      *      can react properly. This updates the THREADINFO
  74.      *      structure, but does _not_ call _endthread(). So you
  75.      *      should either call this function before calling
  76.      *      _endthread() or as the last function call in the
  77.      *      thread function itself before it exits.
  78.      */
  79.  
  80.     VOID thrGoodbye(PTHREADINFO pti);
  81.  
  82.     /*
  83.      * thrWait:
  84.      *      this function waits for a thread to end
  85.      */
  86.  
  87.     BOOL thrWait(PTHREADINFO pti);
  88.  
  89.     /*
  90.      * thrFree:
  91.      *      this is a combination of thrClose and
  92.      *      thrWait; the THREADINFO block is then freed
  93.      *      and *ppti set to NULL
  94.      */
  95.  
  96.     BOOL thrFree(PTHREADINFO *ppti);
  97.  
  98.     /*
  99.      * thrKill:
  100.      *      just like thrFree, but the thread is
  101.      *      brutally killed
  102.      */
  103.  
  104.     BOOL thrKill(PTHREADINFO *ppti);
  105.  
  106.     /*
  107.      * thrQueryID:
  108.      *      returns thread ID
  109.      */
  110.  
  111.     TID thrQueryID(PTHREADINFO pti);
  112.  
  113.     /*
  114.      * thrQueryPriority:
  115.      *      returns the priority of the calling thread.
  116.      *      The low byte of the low word is a hexadecimal value
  117.      *      representing a rank (value 0 to 31) within a priority class.
  118.      *      Class values, found in the high byte of the low word, are
  119.      *      as follows:
  120.      *          0x01  idle
  121.      *          0x02  regular
  122.      *          0x03  time-critical
  123.      *          0x04  server
  124.      */
  125.  
  126.     ULONG thrQueryPriority(VOID);
  127.  
  128. #endif
  129.  
  130. #if __cplusplus
  131. }
  132. #endif
  133.  
  134.