samples/main-test-sync.cc
author Craig Dowell <craigdo@ee.washington.edu>
Tue, 14 Oct 2008 22:52:41 -0700
changeset 3801 dc1f5e534e56
parent 3800 804beebf1ba5
child 3811 4eb8e926c6d7
permissions -rw-r--r--
slight reorganization and naming change for added realtime methods
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     2
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     3
#include "ns3/simulator.h"
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
     4
#include "ns3/realtime-simulator.h"
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     5
#include "ns3/nstime.h"
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     6
#include "ns3/log.h"
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     7
#include "ns3/system-thread.h"
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     8
#include "ns3/string.h"
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     9
#include "ns3/config.h"
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    10
#include "ns3/global-value.h"
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    11
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    12
#include <unistd.h>
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    13
#include <sys/time.h>
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    14
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    15
using namespace ns3;
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    16
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    17
NS_LOG_COMPONENT_DEFINE ("TestSync");
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    18
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    19
bool gFirstRun = false;
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    20
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    21
  void 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    22
inserted_function (void)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    23
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    24
  NS_ASSERT (gFirstRun);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    25
  NS_LOG_UNCOND ("inserted_function() called at " << 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    26
    Simulator::Now ().GetSeconds () << " s");
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    27
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    28
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    29
  void 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    30
background_function (void)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    31
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    32
  NS_ASSERT (gFirstRun);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    33
  NS_LOG_UNCOND ("background_function() called at " << 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    34
    Simulator::Now ().GetSeconds () << " s");
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    35
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    36
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    37
  void 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    38
first_function (void)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    39
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    40
  NS_LOG_UNCOND ("first_function() called at " << 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    41
    Simulator::Now ().GetSeconds () << " s");
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    42
  gFirstRun = true;
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    43
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    44
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    45
class FakeNetDevice
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    46
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    47
public:
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    48
  FakeNetDevice ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    49
  void Doit1 (void);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    50
  void Doit2 (void);
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    51
  void Doit3 (void);
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    52
  void Doit4 (void);
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    53
};
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    54
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    55
FakeNetDevice::FakeNetDevice ()
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    56
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    57
  NS_LOG_FUNCTION_NOARGS ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    58
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    59
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    60
  void
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    61
FakeNetDevice::Doit1 (void)
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    62
{
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    63
  NS_LOG_FUNCTION_NOARGS ();
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    64
  sleep (1);
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    65
  for (uint32_t i = 0.001; i < 10000; ++i)
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    66
    {
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    67
      // 
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    68
      // Exercise the relative now path
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    69
      //
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    70
      Simulator::ScheduleNow (&inserted_function);
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    71
      usleep (1000);
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    72
    }
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    73
}
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    74
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    75
  void
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    76
FakeNetDevice::Doit2 (void)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    77
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    78
  NS_LOG_FUNCTION_NOARGS ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    79
  sleep (1);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    80
  for (uint32_t i = 0.001; i < 10000; ++i)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    81
    {
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    82
      //
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    83
      // Exercise the relative schedule path
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    84
      //
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    85
      Simulator::Schedule (Seconds (0), &inserted_function);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    86
      usleep (1000);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    87
    }
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    88
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    89
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    90
  void
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    91
FakeNetDevice::Doit3 (void)
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    92
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    93
  NS_LOG_FUNCTION_NOARGS ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    94
  sleep (1);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    95
  for (uint32_t i = 0.001; i < 10000; ++i)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    96
    {
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    97
      //
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
    98
      // Exercise the realtime relative now path
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    99
      //
3801
dc1f5e534e56 slight reorganization and naming change for added realtime methods
Craig Dowell <craigdo@ee.washington.edu>
parents: 3800
diff changeset
   100
      RealtimeSimulator::ScheduleRealtimeNow (&inserted_function);
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   101
      usleep (1000);
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   102
    }
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   103
}
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   104
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   105
  void
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   106
FakeNetDevice::Doit4 (void)
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   107
{
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   108
  NS_LOG_FUNCTION_NOARGS ();
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   109
  sleep (1);
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   110
  for (uint32_t i = 0.001; i < 10000; ++i)
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   111
    {
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   112
      //
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   113
      // Exercise the realtime relative schedule path
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   114
      //
3801
dc1f5e534e56 slight reorganization and naming change for added realtime methods
Craig Dowell <craigdo@ee.washington.edu>
parents: 3800
diff changeset
   115
      RealtimeSimulator::ScheduleRealtime (Seconds (0), &inserted_function);
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   116
      usleep (1000);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   117
    }
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   118
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   119
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   120
  void 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   121
test (void)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   122
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   123
  GlobalValue::Bind ("SimulatorImplementationType", 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   124
    StringValue ("ns3::RealtimeSimulatorImpl"));
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   125
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   126
  FakeNetDevice fnd;
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   127
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   128
  // 
3800
804beebf1ba5 added test for m_running in ScheduleRealNow
Craig Dowell <craigdo@ee.washington.edu>
parents: 3799
diff changeset
   129
  // Make sure ScheduleRealNow works when the system isn't running
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   130
  //
3801
dc1f5e534e56 slight reorganization and naming change for added realtime methods
Craig Dowell <craigdo@ee.washington.edu>
parents: 3800
diff changeset
   131
  RealtimeSimulator::ScheduleRealtimeNow(&first_function);
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   132
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   133
  // 
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   134
  // drive the progression of m_currentTs at a ten millisecond rate
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   135
  //
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   136
  for (double d = 0.; d < 14.999; d += 0.01)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   137
    {
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   138
      Simulator::Schedule (Seconds (d), &background_function);
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   139
    }
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   140
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   141
  Ptr<SystemThread> st1 = Create<SystemThread> (
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   142
    MakeCallback (&FakeNetDevice::Doit1, &fnd));
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   143
  st1->Start ();
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   144
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   145
  Ptr<SystemThread> st2 = Create<SystemThread> (
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   146
    MakeCallback (&FakeNetDevice::Doit2, &fnd));
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   147
  st2->Start ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   148
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   149
  Ptr<SystemThread> st3 = Create<SystemThread> (
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   150
    MakeCallback (&FakeNetDevice::Doit3, &fnd));
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   151
  st3->Start ();
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   152
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   153
  Ptr<SystemThread> st4 = Create<SystemThread> (
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   154
    MakeCallback (&FakeNetDevice::Doit4, &fnd));
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   155
  st4->Start ();
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   156
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   157
  Simulator::Stop (Seconds (15.0));
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   158
  Simulator::Run ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   159
  st1->Join ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   160
  st2->Join ();
3799
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   161
  st3->Join ();
ceea04d07e60 it helps to remember to add function implementations
Craig Dowell <craigdo@ee.washington.edu>
parents: 3796
diff changeset
   162
  st4->Join ();
3796
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   163
  Simulator::Destroy ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   164
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   165
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   166
  int
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   167
main (int argc, char *argv[])
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   168
{
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   169
  for (;;)
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   170
    {
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   171
      test ();
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   172
    }
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   173
}
75c6a3d424d9 make simulator schedule calls explicitly relative throughout. fixes multithread problem in realtime simulator
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   174