00001 #include <j2k/Fred/Standard.hpp>
00002 #include <j2k/nto/Message.hpp>
00003 #include <j2k/nto/Namespace.hpp>
00004 #include <j2k/nto/MsgThread.hpp>
00005
00006 #include <j2k/nto/TimerPulse.hpp>
00007
00008 #include <j2k/nto/Basic_PThread.cpp>
00009 #include <j2k/nto/Message.cpp>
00010 #include <j2k/nto/Namespace.cpp>
00011 #include <j2k/nto/MsgThread.cpp>
00012
00013 #include <j2k/nto/TimerPulse.cpp>
00014
00015 class TimerPulseTest : public TimerPulse {
00016 public:
00017
00018 TimerPulseTest( ULONG clk = WAITING )
00019 : TimerPulse( clk ), loop( 0 ), avg( 0 )
00020 {
00021 }
00022
00023 virtual void tick( int signo )
00024 {
00025 loop++;
00026 printf( "#" );
00027 fflush( stdout );
00028 if ( loop > 100 )
00029 {
00030 exit( 0 );
00031 }
00032 }
00033
00034 int loop;
00035 virtual ~TimerPulseTest() { }
00036 };
00037
00038 class Client : public MsgThread
00039 {
00040 public:
00041
00042 int id;
00043 pid_t p;
00044
00045 Client( MsgNameSpace* n0 ) : MsgThread( client, n0 )
00046 {
00047 p = pid;
00048 }
00049
00050 virtual void run()
00051 {
00052 printf( "Client start\n" );
00053 setprio( pid, 8 );
00054 sched_yield();
00055 int i = 20;
00056 while( i < 30 )
00057 {
00058 printf( "C[%d]", i );
00059 MsgThread::send( i++ );
00060 }
00061 }
00062 };
00063
00064 class Server : public MsgThread
00065 {
00066 public:
00067 pid_t p;
00068 int id;
00069
00070 Server( MsgNameSpace* n0, const char* name ) : MsgThread( server, n0, name )
00071 {
00072 p = pid;
00073 }
00074
00075 virtual void run()
00076 {
00077 printf( "Server start\n" );
00078 setprio( pid, 8 );
00079 sched_yield();
00080
00081 int i = 10000;
00082 while( i < 10030 )
00083 {
00084 printf( "S" );
00085 int rcvid = MsgThread::receive();
00086
00087 if ( rcvid == -1 ) break;
00088
00089 int r = MsgThread::handleReceive( rcvid );
00090
00091 if ( r != 0 ) continue;
00092
00093 printf( "S[%d][%d]", m->getMessageNumber(), i );
00094
00095 MsgThread::reply( rcvid, i++ );
00096 }
00097 }
00098 };
00099
00100 int main()
00101 {
00102 MsgNameSpace* nn = new MsgNameSpace();
00103
00104 Server a( nn, "fred" );
00105 Client b( nn );
00106
00107 a.start();
00108 b.start();
00109
00110 a.id = (int)b.p;
00111 b.id = (int)a.p;
00112
00113 a.join();
00114 b.join();
00115
00116 TimerPulseTest t;
00117 t.start();
00118
00119 for( int k = 0; k < 100; k++ )
00120 {
00121 printf( "M" );
00122 setprio( pthread_self(), 9 );
00123 sched_yield();
00124 }
00125
00126 return 0;
00127 }