⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osutils.cxx

📁 sloedgy open sip stack source code
💻 CXX
📖 第 1 页 / 共 5 页
字号:
/*
 * osutils.cxx
 *
 * Operating System utilities.
 *
 * Portable Windows Library
 *
 * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
 *
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 *
 * The Original Code is Portable Windows Library.
 *
 * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
 *
 * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
 * All Rights Reserved.
 *
 * Contributor(s): ______________________________________.
 *
 * $Log: osutils.cxx,v $
 * Revision 1.7  2007/07/16 09:43:56  joegenbaclor
 * PTRACE now uses internal OSS Logger
 *
 * Revision 1.6  2007/07/16 05:55:43  joegenbaclor
 * Added new func to set Ptrace stream as well as the external mutex
 *
 * Revision 1.5  2007/03/11 03:58:46  joegenbaclor
 * Disabled PMEMORY_CHECK for release builds
 *
 * Revision 1.4  2007/01/10 23:58:02  joegenbaclor
 * launcher specific code
 *
 * Revision 1.3  2006/11/28 07:59:30  joegenbaclor
 * Corrected some compile warning on X64 build
 *
 * Revision 1.2  2006/11/15 09:17:13  joegenbaclor
 * Replaced all __asm int 3 instances with new __debugbreak() intrinsic
 *
 * Revision 1.1  2006/06/29 04:18:19  joegenbaclor
 * *** empty log message ***
 *
 * Revision 1.239  2006/05/23 22:28:11  csoutheren
 * Add timer protection for backwards running clocks
 *
 * Revision 1.238  2006/05/23 00:57:30  csoutheren
 * Fix race condition in timer startup (maybe)
 *
 * Revision 1.237  2005/12/04 22:43:30  csoutheren
 * Cleanup patches from Kilian Krause
 *
 * Revision 1.236  2005/11/30 12:47:42  csoutheren
 * Removed tabs, reformatted some code, and changed tags for Doxygen
 *
 * Revision 1.235  2005/11/09 09:11:39  csoutheren
 * Moved Windows-specific AttachThreadInput callsto seperate member function
 * on PThread. This removes a linearly increasing delay in creating new threads
 *
 * Revision 1.234  2005/10/22 04:50:23  csoutheren
 * Fixed hole in mutex locking of PTrace
 *
 * Revision 1.233  2005/08/30 06:36:39  csoutheren
 * Added ability to rotate output logs on a daily basis
 *
 * Revision 1.232  2005/03/19 02:52:55  csoutheren
 * Fix warnings from gcc 4.1-20050313 shapshot
 *
 * Revision 1.231  2005/01/31 08:05:40  csoutheren
 * More patches for MacOSX, thanks to Hannes Friederich
 *
 * Revision 1.230  2005/01/26 05:37:59  csoutheren
 * Added ability to remove config file support
 *
 * Revision 1.229  2005/01/04 07:44:03  csoutheren
 * More changes to implement the new configuration methodology, and also to
 * attack the global static problem
 *
 * Revision 1.228  2004/08/16 06:40:59  csoutheren
 * Added adapters template to make device plugins available via the abstract factory interface
 *
 * Revision 1.227  2004/06/30 12:17:06  rjongbloed
 * Rewrite of plug in system to use single global variable for all factories to avoid all sorts
 *   of issues with startup orders and Windows DLL multiple instances.
 *
 * Revision 1.226  2004/06/03 13:30:58  csoutheren
 * Renamed INSTANTIATE_FACTORY to avoid potential namespace collisions
 * Added documentaton on new PINSTANTIATE_FACTORY macro
 * Added generic form of PINSTANTIATE_FACTORY
 *
 * Revision 1.225  2004/06/03 12:47:59  csoutheren
 * Decomposed PFactory declarations to hopefully avoid problems with Windows DLLs
 *
 * Revision 1.224  2004/06/01 05:22:44  csoutheren
 * Restored memory check functionality
 *
 * Revision 1.223  2004/05/23 12:34:38  rjongbloed
 * Fixed PProcess startup up execution to after PProcess instance is created
 *   so does not crash if using startup technique to initialise tracing.
 *
 * Revision 1.222  2004/05/21 00:28:39  csoutheren
 * Moved PProcessStartup creation to PProcess::Initialise
 * Added PreShutdown function and called it from ~PProcess to handle PProcessStartup removal
 *
 * Revision 1.221  2004/05/18 21:49:25  csoutheren
 * Added ability to display trace output from program startup via environment
 * variable or by application creating a PProcessStartup descendant
 *
 * Revision 1.220  2004/05/18 12:43:31  csoutheren
 * Fixed compile problem on MSVC 6
 *
 * Revision 1.219  2004/05/18 06:01:06  csoutheren
 * Deferred plugin loading until after main has executed by using abstract factory classes
 *
 * Revision 1.218  2004/05/18 02:32:09  csoutheren
 * Fixed linking problems with PGenericFactory classes
 *
 * Revision 1.217  2004/05/13 15:05:43  csoutheren
 * Added <vector.h>
 *
 * Revision 1.216  2004/05/13 14:54:57  csoutheren
 * Implement PProcess startup and shutdown handling using abstract factory classes
 *
 * Revision 1.215  2004/04/24 06:27:56  rjongbloed
 * Fixed GCC 3.4.0 warnings about PAssertNULL and improved recoverability on
 *   NULL pointer usage in various bits of code.
 *
 * Revision 1.214  2004/04/12 07:33:46  csoutheren
 * Temporarily disabled removal of empty TRACE output on Linux
 *
 * Revision 1.213  2004/04/03 08:22:21  csoutheren
 * Remove pseudo-RTTI and replaced with real RTTI
 *
 * Revision 1.212  2004/04/03 06:54:29  rjongbloed
 * Many and various changes to support new Visual C++ 2003
 *
 * Revision 1.211  2004/03/22 10:15:27  rjongbloed
 * Added classes similar to PWaitAndSignal to automatically unlock a PReadWriteMutex
 *   when goes out of scope.
 *
 * Revision 1.210  2004/03/20 09:08:15  rjongbloed
 * Changed interaction between PTrace and PSystemLog so that the tracing code does
 *   not need to know about the system log, thus reducing the code footprint for most apps.
 *
 * Revision 1.209  2003/11/13 21:42:32  csoutheren
 * Fixed problem with thread name display under Windows thanks to Ted Szoczei
 *
 * Revision 1.208  2003/11/08 01:42:19  rjongbloed
 * Added thread names to DevStudio display, thanks Ted Szoczei
 *
 * Revision 1.207  2003/09/17 09:02:14  csoutheren
 * Removed memory leak detection code
 *
 * Revision 1.206  2003/09/17 01:18:03  csoutheren
 * Removed recursive include file system and removed all references
 * to deprecated coooperative threading support
 *
 * Revision 1.205  2003/07/24 22:01:42  dereksmithies
 * Add fixes from Peter Nixon  for fixing install problems. Thanks.
 *
 * Revision 1.204  2003/03/27 07:27:44  robertj
 * Added function to get a bunch of arguments as a string array.
 *
 * Revision 1.203  2003/01/24 10:21:06  robertj
 * Fixed issues in RTEMS support, thanks Vladimir Nesic
 *
 * Revision 1.202  2002/12/18 05:31:31  robertj
 * Moved PTimeInterval::GetInterval() to common code.
 *
 * Revision 1.201  2002/12/11 03:23:27  robertj
 * Fixed deadlock in read/write mutex, at price of not having seemless upgrading
 *   of read lock to write lock. There is now a window in which some other
 *   thread may gain write lock from the thread that was trying to upgrade.
 *
 * Revision 1.200  2002/12/10 02:39:07  robertj
 * Avoid odd trace output to stderr before trace file is set.
 *
 * Revision 1.199  2002/10/09 00:46:19  robertj
 * Changed PThread::Create() so does not return PThread pointer if the thread
 *   has been created auto-delete, the pointer is extremely dangerous to use
 *   as it could be deleted at any time, so to remove temptation ...
 *
 * Revision 1.198  2002/10/08 03:35:15  robertj
 * Fixed BSD warning
 *
 * Revision 1.197  2002/10/04 08:21:26  robertj
 * Changed read/write mutex so can be called by same thread without deadlock.
 *
 * Revision 1.196  2002/07/30 02:55:09  craigs
 * Added program start time to PProcess
 *
 * Revision 1.195  2002/06/27 06:38:58  robertj
 * Changes to remove memory leak display for things that aren't memory leaks.
 *
 * Revision 1.194  2002/06/15 02:16:36  robertj
 * Fixed bug (from rev 1.190) so can now use PTimer::Reset() after the timer
 *   had previously expired (resetTiem was being zeroed), thanks Ted Szoczei
 *
 * Revision 1.193  2002/06/05 12:29:15  craigs
 * Changes for gcc 3.1
 *
 * Revision 1.192  2002/06/04 00:25:31  robertj
 * Fixed incorrectly initialised trace indent, thanks Artis Kugevics
 *
 * Revision 1.191  2002/05/31 04:10:44  robertj
 * Fixed missing mutex in PTrace::SetStream, thanks Federico Pinna
 *
 * Revision 1.190  2002/05/28 13:05:26  robertj
 * Fixed PTimer::SetInterval so it restarts timer as per operator=()
 *
 * Revision 1.189  2002/05/22 00:42:03  craigs
 * Added GMTTime flag to tracing options
 *
 * Revision 1.188  2002/05/01 03:45:09  robertj
 * Added initialisation of PreadWriteMutex and changed slightly to agree
 *   with the text book definition of a semaphore for one of the mutexes.
 *
 * Revision 1.187  2002/04/30 06:21:38  robertj
 * Fixed PReadWriteMutex class to implement text book algorithm!
 *
 * Revision 1.186  2002/04/30 03:39:21  robertj
 * Changed PTimer::Stop() so does not return until timer is REALLY stopped, in
 *   particular when a possibly executing OnTimeout() function has completed.
 *
 * Revision 1.185  2002/04/24 01:19:07  robertj
 * Added milliseconds to PTRACE output timestamp
 *
 * Revision 1.184  2002/04/24 01:10:28  robertj
 * Fixed problem with PTRACE_BLOCK indent level being correct across threads.
 *
 * Revision 1.183  2002/04/19 00:43:17  craigs
 * Fixed problem with file modes
 *
 * Revision 1.182  2002/04/19 00:20:31  craigs
 * Added option to append to log file rather than create anew each time
 *
 * Revision 1.181  2002/02/14 05:14:51  robertj
 * Fixed possible deadlock if a timer is deleted (however indirectly) in the
 *   OnTimeout of another timer.
 *
 * Revision 1.180  2002/02/11 04:07:00  robertj
 * Fixed possibly race condition in PTRACE of first message. Consequence is
 *   that cannot PTRACE until have PProcess, ie before main() is executed.
 *
 * Revision 1.179  2002/01/31 08:14:16  robertj
 * Put back code taken out by GCC 3.0 patch. It really SHOULD be there!
 *
 * Revision 1.178  2002/01/26 23:57:45  craigs
 * Changed for GCC 3.0 compatibility, thanks to manty@manty.net
 *
 * Revision 1.177  2002/01/26 15:04:44  yurik
 * Fixed trace stream to a file
 *
 * Revision 1.176  2001/12/18 23:22:54  robertj
 * Fixed problem for if excecutable is "renamed" using unix exec() and the
 *   argv0 does not point to executable file.
 *
 * Revision 1.175  2001/12/15 04:49:17  robertj
 * Added stream I/O functions for argument list.
 *
 * Revision 1.174  2001/12/14 00:42:56  robertj
 * Fixed unix compatibility with trace of threads not created by pwlib.
 *
 * Revision 1.173  2001/12/13 09:21:43  robertj
 * Changed trace so shows thread id if current thread not created by PWLib.
 *
 * Revision 1.172  2001/11/30 04:19:26  robertj
 * Fixed correct setting of option bits in PTrace::Initialise()
 * Added date and time to first message in PTrace::Initialise()
 *
 * Revision 1.171  2001/11/14 06:06:26  robertj
 * Added functions on PTimer to get reset value and restart timer to it.
 *
 * Revision 1.170  2001/10/15 00:48:02  robertj
 * Fixed warning on later MSVC compilers.
 *
 * Revision 1.169  2001/09/03 08:08:31  robertj
 * Added tab so get extra "column" in trace output.
 *
 * Revision 1.168  2001/08/20 06:56:47  robertj
 * Fixed memory leak report which isn't a memory leak.
 *
 * Revision 1.167  2001/07/20 04:14:19  robertj
 * Removed GNU warning.
 *
 * Revision 1.166  2001/05/29 02:50:56  robertj
 * Fixed GNU compatibility
 *
 * Revision 1.165  2001/05/29 00:49:18  robertj
 * Added ability to put in a printf %x in thread name to get thread object
 *   address into user settable thread name.
 *
 * Revision 1.164  2001/05/03 06:26:22  robertj
 * Fixed strange problem that occassionally crashes on exit. Mutex cannot be
 *   destroyed before program exit.
 *
 * Revision 1.163  2001/04/27 01:05:26  yurik
 * Exit crash removal try
 *
 * Revision 1.162  2001/04/15 03:39:24  yurik
 * Removed shutdown flag. Use IsTerminated() instead
 *
 * Revision 1.161  2001/04/14 04:53:01  yurik
 * Got rid of init_seg pragma and added process shutdown flag
 *
 * Revision 1.160  2001/03/23 20:28:54  yurik
 * Got rid of pragma warning for WinCE port
 *
 * Revision 1.159  2001/03/09 05:50:48  robertj
 * Added ability to set default PConfig file or path to find it.
 *
 * Revision 1.158  2001/03/02 22:29:08  yurik
 * New pragma for WinCE related port which enables (de)construction of library static objects be before applications'
 * Eliminated nasty access violation stemmed from using static PMutex object in PTrace code. Thanks to Yuriy Gorvitovskiy.
 *
 * Revision 1.157  2001/02/22 22:31:44  robertj
 * Changed PProcess version display to show build number even if zero.
 *
 * Revision 1.156  2001/02/22 08:16:42  robertj
 * Added standard trace file setup subroutine.
 *
 * Revision 1.155  2001/02/19 03:44:20  robertj
 * Changed "pl" in version number string to a simple ".", Now like 1.1.19
 *
 * Revision 1.154  2001/01/28 00:53:00  yurik
 * WinCE port-related - streams refined
 *
 * Revision 1.153  2001/01/25 07:14:39  robertj
 * Fixed spurios memory leak message. Usual static global problem.
 *
 * Revision 1.152  2001/01/24 18:27:44  yurik
 * Added if !#defined WinCE when asm code used. Asm can't be used under WCE
 *
 * Revision 1.151  2001/01/02 07:47:44  robertj
 * Fixed very narrow race condition in timers (destroyed while in OnTimeout()).
 *
 * Revision 1.150  2000/12/21 12:37:03  craigs
 * Fixed deadlock problem with creating PTimer inside OnTimeout
 *
 * Revision 1.149  2000/11/28 12:55:37  robertj
 * Added static function to create a new thread class and automatically
 *   run a function on another class in the context of that thread.
 *
 * Revision 1.148  2000/10/20 05:31:32  robertj
 * Added function to change auto delete flag on a thread.
 *
 * Revision 1.147  2000/08/31 01:12:36  robertj
 * Fixed problem with no new lines in trace output to stderr.
 *
 * Revision 1.146  2000/08/30 05:56:07  robertj
 * Fixed free running timers broken by previous change.
 *
 * Revision 1.145  2000/08/30 03:17:00  robertj
 * Improved multithreaded reliability of the timers under stress.
 *
 * Revision 1.144  2000/06/26 11:17:20  robertj
 * Nucleus++ port (incomplete).
 *
 * Revision 1.143  2000/06/26 09:27:16  robertj
 * Added ability to get at the PTraceStream without timestamps etc, use UINT_MAX trace level.
 *
 * Revision 1.142  2000/06/02 01:38:07  craigs
 * Fixed typos
 *
 * Revision 1.141  2000/06/02 01:35:56  craigs
 * Added more guards for NULL PStrings in PConfigArg handling
 *
 * Revision 1.140  2000/05/25 14:45:07  robertj
 * Fixed detection of real argument over configured value.
 *
 * Revision 1.139  2000/05/25 13:47:51  robertj
 * Fixed warning with GNU.
 *
 * Revision 1.138  2000/05/25 11:05:55  robertj
 * Added PConfigArgs class so can save program arguments to config files.
 *
 * Revision 1.137  2000/05/05 10:08:29  robertj
 * Fixed some GNU compiler warnings
 *
 * Revision 1.136  2000/04/28 06:58:50  robertj
 * Fixed bug introduced when added Ashley Untts fix, forgot to take out old code!
 *
 * Revision 1.135  2000/04/27 04:19:27  robertj
 * Fixed bug in restarting free running timers, thanks Ashley Unitt.
 *
 * Revision 1.134  2000/04/03 18:42:40  robertj
 * Added function to determine if PProcess instance is initialised.
 *
 * Revision 1.133  2000/03/29 20:12:00  robertj
 * Fixed GNU C++ warning
 *
 * Revision 1.132  2000/03/29 01:55:52  robertj
 * Fixed infinite recursion on PProcess::Current() = NULL assertion.
 *
 * Revision 1.131  2000/03/02 05:43:12  robertj
 * Fixed handling of NULL pointer on current thread in PTRACE output.
 *
 * Revision 1.130  2000/02/29 12:26:14  robertj
 * Added named threads to tracing, thanks to Dave Harvey
 *
 * Revision 1.129  2000/02/17 11:34:28  robertj
 * Changed PTRACE output to help line up text after filename output.
 *
 * Revision 1.128  2000/01/06 14:09:42  robertj
 * Fixed problems with starting up timers,losing up to 10 seconds
 *
 * Revision 1.127  1999/10/19 09:21:30  robertj
 * Added functions to get current trace options and level.
 *
 * Revision 1.126  1999/10/14 08:08:27  robertj
 * Fixed problem, assuring millisecond accuracy in timestamp of trace output.
 *
 * Revision 1.125  1999/09/14 13:02:52  robertj
 * Fixed PTRACE to PSYSTEMLOG conversion problem under Unix.
 *
 * Revision 1.124  1999/09/13 13:15:07  robertj
 * Changed PTRACE so will output to system log in PServiceProcess applications.
 *
 * Revision 1.123  1999/08/22 12:54:35  robertj
 * Fixed warnings about inlines on older GNU compiler
 *
 * Revision 1.122  1999/06/23 14:19:46  robertj
 * Fixed core dump problem with SIGINT/SIGTERM terminating process.
 *
 * Revision 1.121  1999/06/14 07:59:38  robertj
 * Enhanced tracing again to add options to trace output (timestamps etc).
 *
 * Revision 1.120  1999/04/26 08:06:51  robertj
 * Added missing function in cooperative threading.
 *
 * Revision 1.119  1999/03/01 13:51:30  craigs
 * Fixed ugly little bug in the cooperative multithreading that meant that threads blocked
 * on timers didn't always get rescheduled.
 *
 * Revision 1.118  1999/02/23 10:13:31  robertj
 * Changed trace to only diplay filename and not whole path.
 *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -