- /*
- * Copyright 1995, 2000 Perforce Software. All rights reserved.
- *
- * This file is part of Perforce - the FAST SCM System.
- */
- /*
- * threading.h -- handle multiple users at the same time
- *
- * These classes are meant to take the vicious ifdef hacking required
- * to get threading (forking, whatever) to work on different platforms.
- *
- * Some terms:
- *
- * "thread": a process on UNIX; a thread on NT
- * "leader": the parent process on UNIX; the only process on NT
- *
- * Classes defined:
- *
- * Threading: caller interface to launch multiple threads
- *
- * Threader: implementation of threading (not public)
- *
- * Thread (abstract): glues caller's execution object so that Threading
- * can run and then delete it.
- *
- * Process (abstract): callbacks into caller's environment to signal
- * process related changes.
- *
- * Public methods:
- *
- * Thread::Run() - do what was supposed to happen in the thread
- * Thread::~Thread() - delete user's class, cleaning up thread exit
- *
- * Process::Child() - indicates that Run() will be a child process
- * Process::Cancel() - indicates that leader should stop launching
- *
- * Threading::Launch() - create a thread/process and call Thread::Run().
- *
- * Threading::Cancelled() - returns true (in leader) if Cancel()
- *
- * Threading::Cancel() - can be called from any thread to tell the
- * leader to stop; leader calls Process::Cancel()
- *
- * Threading::Reap() - called in leader to kill children
- *
- * The current termination ritual:
- *
- * Someone, somewhere calls Threading::Cancel(), which is static
- * and always available. It can get called by the leader
- * catching SIGTERM, or by anyone at the user's request.
- *
- * If a child gets Threading::Cancel() on UNIX, it sends a SIGTERM
- * to its parent so that the leader gets Threading::Cancel() called.
- *
- * In the leader, Threading::Cancel() sets the "cancelled" flag and
- * calls Process::Cancel(), so that (in fact) the listen socket
- * descriptor gets closed, breaking the accept() loop.
- *
- * The leader, out of its thread creation loop, can call Reap()
- * in order to kill and collect all the child processes. It should
- * only do that if the database is safely locked from child process
- * access.
- */
- enum ThreadMode {
- TmbSingle, // just single threading
- TmbMulti, // multi threading (fork, threads)
- TmbDaemon // fork, then forking multi threading (UNIX)
- } ;
- class Thread {
- public:
- virtual ~Thread();
- virtual void Run() = 0;
- } ;
- class Process {
- public:
- virtual ~Process();
- virtual void Child() = 0;
- virtual void Cancel() = 0;
- } ;
- class Threader {
- protected:
- friend class Threading;
- Threader() { cancelled = 0; }
- virtual ~Threader();
- virtual void Launch( Thread *t );
- virtual void Cancel();
- virtual void Reap();
- int cancelled;
- Process *process;
- } ;
- class Threading {
- public:
- Threading( ThreadMode tmb, Process *p );
- ~Threading() { delete threader; }
- void Launch( Thread *t ) { threader->Launch( t ); }
- int Cancelled() { return threader->cancelled; }
- void Reap() { threader->Reap(); }
- static void Cancel() { if( current ) current->Cancel(); }
- static int WasCancelled() { if( current ) return current->cancelled; else return 0; }
- private:
- Threader *threader;
- static Threader *current;
- } ;
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 7893 | Johan Nilsson | OFFLINE CHANGELIST 10 - SUBMITTED ON 2011/03/23 11:18:27 Upgrade project files to VS2010... and switching to msbuild for the entire project. Retargeted everything to .NET4 Client Profile for the time being, due to VS2010 C++ limitations (can't target anything other than 4.0 without complicating the setup too much). Shouldn't be too hard to retarget later if push comes to shove. Added VS2010 P4API stuff directly inside this project also to make things easier to get up and running for the moment. Removed old static P4API libraries. ____________________________________________________________ OFFLINE CHANGELIST 9 - SUBMITTED ON 2011/03/22 07:35:31 Converted to VS2010 « |
14 years ago |