Statistics
| Branch: | Tag: | Revision:

root / gnuradio-core / src / lib / runtime / gr_top_block_impl.h @ cda71d95

History | View | Annotate | Download (2 kB)

1
/* -*- c++ -*- */
2
/*
3
 * Copyright 2007 Free Software Foundation, Inc.
4
 * 
5
 * This file is part of GNU Radio
6
 * 
7
 * GNU Radio is free software; you can redistribute it and/or modify
8
 * it under the terms of the GNU General Public License as published by
9
 * the Free Software Foundation; either version 3, or (at your option)
10
 * any later version.
11
 * 
12
 * GNU Radio is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
16
 * 
17
 * You should have received a copy of the GNU General Public License
18
 * along with GNU Radio; see the file COPYING.  If not, write to
19
 * the Free Software Foundation, Inc., 51 Franklin Street,
20
 * Boston, MA 02110-1301, USA.
21
 */
22
23
#ifndef INCLUDED_GR_TOP_BLOCK_IMPL_H
24
#define INCLUDED_GR_TOP_BLOCK_IMPL_H
25
26
#include <gr_scheduler_thread.h>
27
28
/*!
29
 *\brief Implementation details of gr_top_block
30
 *
31
 * \ingroup internal
32
 * The actual implementation of gr_top_block. Separate class allows
33
 * decoupling of changes from dependent classes.
34
 *
35
 */
36
class gr_top_block_impl
37
{
38
public:
39
  gr_top_block_impl(gr_top_block *owner);
40
  ~gr_top_block_impl();
41
42
  // Create and start scheduler threads
43
  void start();
44
45
  // Signal scheduler threads to stop
46
  void stop();
47
48
  // Wait for scheduler threads to exit
49
  void wait();
50
51
  // Lock the top block to allow reconfiguration
52
  void lock();
53
54
  // Unlock the top block at end of reconfiguration
55
  void unlock();
56
57
  // Return true if flowgraph is running
58
  bool is_running() const { return d_running; }
59
  
60
private:
61
    
62
  bool                           d_running;
63
  gr_flat_flowgraph_sptr         d_ffg;
64
  gr_scheduler_thread_vector_t   d_threads;
65
  gr_top_block                  *d_owner;
66
  int                            d_lock_count;
67
  omni_mutex                     d_reconf;
68
69
  std::vector<gr_basic_block_vector_t> d_graphs;
70
71
  void start_threads();
72
  void restart();
73
};
74
75
#endif /* INCLUDED_GR_TOP_BLOCK_IMPL_H */