home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
thrd1.zip
/
threads.cpp
< prev
next >
Wrap
Text File
|
1994-03-07
|
6KB
|
264 lines
// Need following OS/2 include to get definition of WM_USER
#define INCL_WINMESSAGEMGR
extern "C"
{
#include <os2.h>
}
#include "threads.hpp"
main(int argc, char *argv[])
{
IApplication::current().setArgs( argc, argv );
MyWindow myWindow;
IApplication::current().run();
}
MyOtherWindow :: MyOtherWindow( char* title, unsigned long windowId )
: IFrameWindow( title, windowId ),
myStaticText( ID_STATIC_TEXT, this, this )
{
myStaticText.setText( "Hello World");
setClient( &myStaticText );
show();
}
Boolean My2ndThread :: user( IEvent &evt)
{
switch (evt.parameter1().number1() )
{
case ID_START_WINDOW_2:
{
if ( !my2ndWindow )
my2ndWindow = new MyOtherWindow("2nd Window", ID_WINDOW_2 );
break;
}
case ID_STOP_WINDOW_2:
{
if ( my2ndWindow )
{
my2ndWindow->close();
my2ndWindow = 0 ;
}
break;
}
case ID_START_WINDOW_3:
{
if ( !my3rdWindow )
my3rdWindow = new MyOtherWindow("3rd Window", ID_WINDOW_3 );
break;
}
case ID_STOP_WINDOW_3:
{
if ( my3rdWindow )
{
my3rdWindow->close();
my3rdWindow = 0;
}
break;
}
case ID_START_WINDOW_4:
{
if ( !my4thWindow )
my4thWindow = new MyOtherWindow("4th Window", ID_WINDOW_4 );
break;
}
case ID_STOP_WINDOW_4:
{
if ( my4thWindow )
{
my4thWindow->close();
my4thWindow = 0 ;
}
break;
}
case ID_START_WINDOW_5:
{
if ( !my5thWindow )
{
my5thWindow = new MyOtherWindow("5th Window", ID_WINDOW_5 );
}
break;
}
case ID_STOP_WINDOW_5:
{
if ( my5thWindow )
{
my5thWindow->close();
my5thWindow = 0;
}
break;
}
}
// Write to a IStaticText owned by thread1
t1Static->setText(IString("Just handled id: ") + IString(evt.parameter1().number1()));
return true;
}
My2ndThread :: My2ndThread(IStaticText* static1 )
: my2ndWindow( 0 ),
my3rdWindow( 0 ),
my4thWindow( 0 ),
my5thWindow( 0 ),
myObjectWindow( 0 ),
t1Static(static1)
{ ; }
void My2ndThread :: run()
{
myObjectWindow = new IObjectWindow( );
IWindowHandle objHandle= myObjectWindow->handle();
unsigned long whnd = objHandle;
IUserHandler::handleEventsFor( myObjectWindow );
IThread::current().processMsgs();
if (my2ndWindow)
{
my2ndWindow->close();
my2ndWindow = 0;
}
if (my3rdWindow)
{
my3rdWindow->close();
my3rdWindow = 0;
}
if (my4thWindow)
{
my4thWindow->close();
my4thWindow = 0;
}
if (my5thWindow)
{
my5thWindow->close();
my5thWindow = 0;
}
IUserHandler::stopHandlingEventsFor( myObjectWindow );
}
My2ndThread :: ~My2ndThread()
{
if (my2ndWindow)
my2ndWindow->close();
if (my3rdWindow)
my3rdWindow->close();
if (my4thWindow)
my4thWindow->close();
if (my5thWindow)
my5thWindow->close();
IUserHandler::stopHandlingEventsFor( myObjectWindow );
delete myObjectWindow;
if ( isStarted() )
IThread::current().stopProcessingMsgs();
}
MyWindow :: MyWindow( )
: IFrameWindow( "Main Window", ID_WINDOW_1 ),
myStaticText( ID_STATIC_TEXT, this, this ),
myMenuBar( ID_MAIN, this ),
my2ndThread(&myStaticText)
{
myStaticText.setText( "Hello World");
setClient( &myStaticText );
ICommandHandler::handleEventsFor( this );
setFocus();
show();
}
MyWindow :: ~MyWindow( )
{
ICommandHandler::stopHandlingEventsFor( this );
if ( my2ndThread.isStarted() )
{
my2ndThread.stopProcessingMsgs();
IThread::current().waitFor( my2ndThread );
}
}
Boolean MyWindow::command ( ICommandEvent &evt )
{
Boolean brc = false;
switch ( evt.commandId() )
{
case ID_START_THREAD :
{
my2ndThread.start(
new IThreadMemberFn<My2ndThread>(my2ndThread,My2ndThread::run), true);
brc = true;
break;
}
case ID_STOP_THREAD :
{
my2ndThread.stopProcessingMsgs();
brc = true;
break;
}
case ID_START_WINDOW_2 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_START_WINDOW_2, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
case ID_STOP_WINDOW_2 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_STOP_WINDOW_2, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
case ID_START_WINDOW_3 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_START_WINDOW_3, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
case ID_STOP_WINDOW_3 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_STOP_WINDOW_3, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
case ID_START_WINDOW_4 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_START_WINDOW_4, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
case ID_STOP_WINDOW_4 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_STOP_WINDOW_4, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
case ID_START_WINDOW_5 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_START_WINDOW_5, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
case ID_STOP_WINDOW_5 :
{
my2ndThread.myObjectWindow->handle().postEvent( WM_USER,
IEventParameter1( ID_STOP_WINDOW_5, 0 ), IEventParameter2( 0 ) );
brc = true;
break;
}
}
return brc;
}