/*
* main.h
*
* PWLib application header file for threadex
*
* Copyright (c) 2003 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.
*
* Contributor(s): ______________________________________.
*
* $Log: main.h,v $
* Revision 1.5 2006/01/13 07:20:22 dereksmithies
* add option to use threads generated by the PThread::Create call.
*
* Revision 1.4 2006/01/11 22:14:48 dereksmithies
* Add autodelete test option to code.
* Move Resume() operators out of the constructor for threads.
* The Resume() operator is "ok" in the constructor, if Resume() is at the end of the constructor,
* and the thread class does not have a descendant.
*
* Revision 1.3 2006/01/06 23:08:24 dereksmithies
* Add some code, now it crashes on unix with the command args -d 1 -b
*
* Revision 1.2 2005/07/26 00:46:22 dereksmithies
* Commit code to provide two examples of waiting for a thread to terminate.
* The busy wait method provides a method of testing PWLIB processes for closing
* a thread. With a delay of 20ms, SMP box, we found some pwlib methods that
* needed fixing. At the time of committing this change, the pwlib code was correct.
*
* Revision 1.1 2004/09/13 01:13:26 dereksmithies
* Initial release of VERY simple program to test PThread::WaitForTermination
*
* Revision 1.1 2004/09/10 01:59:35 dereksmithies
* Initial release of program to test Dtmf creation and detection.
*
*
*/
#ifndef _Threadex_MAIN_H
#define _Threadex_MAIN_H
/**This class is a simple simple thread that just creates, waits a
period of time, and exits.It is designed to test the PwLib methods
for reporting the status of a thread. This class will be created
over and over- millions of times is possible if left long
enough. If the pwlib thread status functions are broken, a segfault
will result. Past enxperience has found a fault in pwlib with the
BusyWait option on, with SMP machines and a delay period of 20ms */
class DelayThread : public PThread
{
PCLASSINFO(DelayThread, PThread);
public:
DelayThread(PINDEX _delay)
: PThread(10000, NoAutoDeleteThread), delay(_delay)
{ }
DelayThread(PINDEX _delay, BOOL)
: PThread(10000, AutoDeleteThread), delay(_delay)
{ }
void Main();
protected:
PINDEX delay;
};
////////////////////////////////////////////////////////////////////////////////
/**This thread handles the Users console requests to query the status of
the launcher thread. It provides a means for the user to close down this
program - without having to use Ctrl-C*/
class UserInterfaceThread : public PThread
{
PCLASSINFO(UserInterfaceThread, PThread);
public:
UserInterfaceThread()
: PThread(10000, NoAutoDeleteThread)
{ }
void Main();
protected:
};
///////////////////////////////////////////////////////////////////////////////
/**This thread launches multiple instances of the BusyWaitThread. Each
thread launched is busy monitored for termination. When the thread
terminates, the thread is deleted, and a new one is created. This
process repeats until segfault or termination by the user */
class LauncherThread : public PThread
{
PCLASSINFO(LauncherThread, PThread);
public:
LauncherThread()
: PThread(10000, NoAutoDeleteThread)
{ iteration = 0; keepGoing = TRUE; }
void Main();
PINDEX GetIteration() { return iteration; }
virtual void Terminate() { keepGoing = FALSE; }
PTimeInterval GetElapsedTime() { return PTime() - startTime; }
PDECLARE_NOTIFIER(PThread, LauncherThread, AutoCreatedMain);
protected:
PINDEX iteration;
PTime startTime;
BOOL keepGoing;
};
////////////////////////////////////////////////////////////////////////////////
class Threadex : public PProcess
{
PCLASSINFO(Threadex, PProcess)
public:
Threadex();
virtual void Main();
PINDEX Delay() { return delay; }
BOOL AutoDelete() { return doAutoDelete; }
BOOL BusyWait() { return doBusyWait; }
BOOL Create() { return doCreate; }
static Threadex & Current()
{ return (Threadex &)PProcess::Current(); }
protected:
PINDEX delay;
BOOL doAutoDelete;
BOOL doBusyWait;
BOOL doCreate;
};
#endif // _Threadex_MAIN_H
// End of File ///////////////////////////////////////////////////////////////
syntax highlighted by Code2HTML, v. 0.9.1