ncbi_system.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_system.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 15:02:30  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef NCBI_SYSTEM__HPP
  10. #define NCBI_SYSTEM__HPP
  11. /*  $Id: ncbi_system.hpp,v 1000.0 2003/10/29 15:02:30 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Vladimir Ivanov
  37.  *
  38.  * File Description: System functions
  39.  *
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbitime.hpp>
  43. #if defined(NCBI_OS_MSWIN)
  44. #  include <corelib/ncbi_os_mswin.hpp>
  45. #endif
  46. BEGIN_NCBI_SCOPE
  47. /////////////////////////////////////////////////////////////////////////////
  48. ///
  49. /// Process limits
  50. ///
  51. /// If, during the program execution, the process exceed any from limits
  52. /// (see ELimitsExitCodeMemory) then:
  53. ///   1) Dump info about current program's state to log-stream.
  54. ///      - if defined print handler "handler", then it will be used.
  55. ///      - if defined "parameter", it will be passed into print handler;
  56. ///   2) Terminate the program.
  57. /// One joint print handler for all limit types is used.
  58. /// Code for program's exit handler.
  59. enum ELimitsExitCode {
  60.     eLEC_None,    ///< Normal exit.
  61.     eLEC_Memory,  ///< Memory limit.
  62.     eLEC_Cpu      ///< CPU usage limit.
  63. };
  64. /// Type of parameter for print handler.
  65. typedef void* TLimitsPrintParameter;
  66. /// Type of handler for printing a dump information after generating
  67. /// any limitation event.
  68. typedef void (*TLimitsPrintHandler)(ELimitsExitCode, size_t, CTime&, TLimitsPrintParameter);
  69. /// [UNIX only]  Set memory limit.
  70. ///
  71. /// Set the limit for the size of dynamic memory (heap) allocated
  72. /// by the process. 
  73. /// 
  74. /// @param max_heap_size
  75. ///   The maximal amount of dynamic memory can be allocated by the process
  76. ///   in any `operator new' (but not malloc, etc.!).
  77. ///   The 0 value lift off the heap restrictions.
  78. /// @param handler
  79. ///   Pointer to a print handler used for dump output.
  80. ///   Use default handler if passed as NULL.
  81. /// @param parameter
  82. ///   Parameter carried into the print handler. Can be passed as NULL.
  83. /// @return 
  84. ///   Completion status.
  85. NCBI_XNCBI_EXPORT
  86. extern bool SetHeapLimit(size_t max_heap_size, 
  87.                          TLimitsPrintHandler handler = 0, 
  88.                          TLimitsPrintParameter parameter = 0);
  89. /// [UNIX only]  Set CPU usage limit.
  90. ///
  91. /// Set the limit for the CPU time that can be consumed by current process.
  92. /// 
  93. /// @param max_cpu_time
  94. ///   The maximal amount of seconds of CPU time can be consumed by the process.
  95. ///   The 0 value lift off the CPU time restrictions.
  96. /// @param handler
  97. ///   Pointer to a print handler used for dump output.
  98. ///   Use default handler if passed as NULL.
  99. /// @param parameter
  100. ///   Parameter carried into the print handler. Can be passed as NULL.
  101. /// @return 
  102. ///   Completion status.
  103. NCBI_XNCBI_EXPORT
  104. extern bool SetCpuTimeLimit(size_t max_cpu_time,
  105.                             TLimitsPrintHandler handler = 0, 
  106.                             TLimitsPrintParameter parameter = 0);
  107. /////////////////////////////////////////////////////////////////////////////
  108. ///
  109. /// System information
  110. ///
  111. /// [UNIX & Windows]  Return number of active CPUs (never less than 1).
  112. NCBI_XNCBI_EXPORT
  113. extern unsigned int GetCpuCount(void);
  114. /////////////////////////////////////////////////////////////////////////////
  115. ///
  116. /// Sleep
  117. ///
  118. /// Suspend execution for a time.
  119. ///
  120. /// Sleep for at least the specified number of microsec/millisec/seconds.
  121. /// Time slice restrictions are imposed by platform/OS.
  122. /// On UNIX the sleep can be interrupted by a signal.
  123. /// [UNIX & Windows]
  124. NCBI_XNCBI_EXPORT
  125. extern void SleepSec(unsigned long sec);
  126. NCBI_XNCBI_EXPORT
  127. extern void SleepMilliSec(unsigned long ml_sec);
  128. NCBI_XNCBI_EXPORT
  129. extern void SleepMicroSec(unsigned long mc_sec);
  130. END_NCBI_SCOPE
  131. /*
  132.  * ===========================================================================
  133.  * $Log: ncbi_system.hpp,v $
  134.  * Revision 1000.0  2003/10/29 15:02:30  gouriano
  135.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.14
  136.  *
  137.  * Revision 1.14  2003/09/25 16:52:47  ivanov
  138.  * CPIDGuard class moved to ncbi_process.hpp
  139.  *
  140.  * Revision 1.13  2003/09/23 21:13:44  ucko
  141.  * +CPIDGuard::UpdatePID
  142.  *
  143.  * Revision 1.12  2003/08/12 17:37:45  ucko
  144.  * Cleaned up CPIDGuardException a bit.
  145.  *
  146.  * Revision 1.11  2003/08/12 17:24:51  ucko
  147.  * Add support for PID files.
  148.  *
  149.  * Revision 1.10  2002/12/18 22:53:21  dicuccio
  150.  * Added export specifier for building DLLs in windows.  Added global list of
  151.  * all such specifiers in mswin_exports.hpp, included through ncbistl.hpp
  152.  *
  153.  * Revision 1.9  2002/07/16 13:38:00  ivanov
  154.  * Little modification and optimization of the Sleep* functions
  155.  *
  156.  * Revision 1.8  2002/07/15 21:43:25  ivanov
  157.  * Added functions SleepMicroSec, SleepMilliSec, SleepSec
  158.  *
  159.  * Revision 1.7  2002/04/11 20:39:16  ivanov
  160.  * CVS log moved to end of the file
  161.  *
  162.  * Revision 1.6  2001/12/09 06:27:36  vakatov
  163.  * GetCpuCount() -- get rid of warning (in 64-bit mode), change ret.val. type
  164.  *
  165.  * Revision 1.5  2001/11/08 21:31:07  ivanov
  166.  * Renamed GetCPUNumber() -> GetCpuCount()
  167.  *
  168.  * Revision 1.4  2001/11/08 21:10:22  ivanov
  169.  * Added function GetCPUNumber()
  170.  *
  171.  * Revision 1.3  2001/07/23 15:59:36  ivanov
  172.  * Added possibility using user defined dump print handler
  173.  *
  174.  * Revision 1.2  2001/07/02 21:33:05  vakatov
  175.  * Fixed against SIGXCPU during the signal handling.
  176.  * Increase the amount of reserved memory for the memory limit handler
  177.  * to 10K (to fix for the 64-bit WorkShop compiler).
  178.  * Use standard C++ arg.processing (ncbiargs) in the test suite.
  179.  * Cleaned up the code. Get rid of the "Ncbi_" prefix.
  180.  *
  181.  * Revision 1.1  2001/07/02 16:47:25  ivanov
  182.  * Initialization
  183.  *
  184.  * ===========================================================================
  185.  */
  186. #endif  /* NCBI_SYSTEM__HPP */