123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Runtime Platforms — SCCD 0.9 documentation</title>
-
- <link rel="stylesheet" href="_static/classic.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <link rel="stylesheet" href="_static/mystyle.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '0.9',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="SCCD 0.9 documentation" href="index.html" />
- <link rel="next" title="Examples" href="examples.html" />
- <link rel="prev" title="Compiler" href="compiler.html" />
- </head>
- <body role="document">
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Examples"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="compiler.html" title="Compiler"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">SCCD 0.9 documentation</a> »</li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="runtime-platforms">
- <span id="id1"></span><h1>Runtime Platforms<a class="headerlink" href="#runtime-platforms" title="Permalink to this headline">¶</a></h1>
- <p>A runtime platform provides the necessary functions for the SCCD kernel to schedule (timed) events. Runtime platforms are implemented in a number of programming languages that can be the target of compilation (at this moment, Python and Javascript are supported). Supporting several runtime platforms is necessary to make SCCD models work in a variety of environments, such as a UI eventloop library or a game engine.</p>
- <div class="section" id="threads">
- <h2>Threads<a class="headerlink" href="#threads" title="Permalink to this headline">¶</a></h2>
- <p>The <code class="docutils literal"><span class="pre">Threads</span></code> platform is the most basic platform. It runs the SCCD model on the main thread when <code class="docutils literal"><span class="pre">Controller.run()</span></code> is called (meaning that the program will block on this call). If input needs to be provided to the SCCD model or the output of the SCCD model needs to be processed while it’s running, a separate thread should be started. For example, the code below shows how input/output works for a compiled SCCD model target_py/target.py which was compiled for the threads platform and has two ports (“input” and “output”):</p>
- <div class="highlight-default"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">target_py.target</span> <span class="k">as</span> <span class="nn">target</span>
- <span class="kn">from</span> <span class="nn">sccd.runtime.statecharts_core</span> <span class="k">import</span> <span class="n">Event</span>
- <span class="kn">import</span> <span class="nn">threading</span>
- <span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
- <span class="n">controller</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">Controller</span><span class="p">()</span>
- <span class="k">def</span> <span class="nf">raw_inputter</span><span class="p">():</span>
- <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
- <span class="n">controller</span><span class="o">.</span><span class="n">addInput</span><span class="p">(</span><span class="n">Event</span><span class="p">(</span><span class="n">raw_input</span><span class="p">(),</span> <span class="s">"input"</span><span class="p">,</span> <span class="p">[]))</span>
- <span class="n">input_thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">raw_inputter</span><span class="p">)</span>
- <span class="n">input_thread</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="k">True</span>
- <span class="n">input_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
- <span class="n">output_listener</span> <span class="o">=</span> <span class="n">controller</span><span class="o">.</span><span class="n">addOutputListener</span><span class="p">([</span><span class="s">"output"</span><span class="p">])</span>
- <span class="k">def</span> <span class="nf">outputter</span><span class="p">():</span>
- <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
- <span class="nb">print</span> <span class="n">output_listener</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
- <span class="n">output_thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">outputter</span><span class="p">)</span>
- <span class="n">output_thread</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="k">True</span>
- <span class="n">output_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
- <span class="n">controller</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
- </pre></div>
- </div>
- </div>
- <div class="section" id="eventloop">
- <h2>Eventloop<a class="headerlink" href="#eventloop" title="Permalink to this headline">¶</a></h2>
- <p>The <code class="docutils literal"><span class="pre">Eventloop</span></code> platform works only in combination with a UI system that allows for scheduling events. Default implementations are provided for the Tkinter UI library on Python, and the default scheduler found in Javascript (through the <code class="docutils literal"><span class="pre">setTimeout</span></code> function).</p>
- <div class="section" id="python">
- <h3>Python<a class="headerlink" href="#python" title="Permalink to this headline">¶</a></h3>
- <div class="highlight-default"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">Tkinter</span> <span class="k">as</span> <span class="nn">tk</span>
- <span class="kn">import</span> <span class="nn">target_py.target</span> <span class="k">as</span> <span class="nn">target</span>
- <span class="kn">from</span> <span class="nn">sccd.runtime.libs.ui</span> <span class="k">import</span> <span class="n">ui</span>
- <span class="kn">from</span> <span class="nn">sccd.runtime.statecharts_core</span> <span class="k">import</span> <span class="n">Event</span>
- <span class="kn">from</span> <span class="nn">sccd.runtime.tkinter_eventloop</span> <span class="k">import</span> <span class="o">*</span>
- <span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
- <span class="n">ui</span><span class="o">.</span><span class="n">window</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Tk</span><span class="p">()</span>
- <span class="n">ui</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">withdraw</span><span class="p">()</span>
- <span class="n">controller</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">Controller</span><span class="p">(</span><span class="n">TkEventLoop</span><span class="p">(</span><span class="n">ui</span><span class="o">.</span><span class="n">window</span><span class="p">))</span>
- <span class="n">controller</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
- <span class="n">ui</span><span class="o">.</span><span class="n">window</span><span class="o">.</span><span class="n">mainloop</span><span class="p">()</span>
- </pre></div>
- </div>
- </div>
- <div class="section" id="javascript">
- <h3>Javascript<a class="headerlink" href="#javascript" title="Permalink to this headline">¶</a></h3>
- <div class="highlight-default"><div class="highlight"><pre><span class="o"><</span><span class="n">script</span> <span class="n">src</span><span class="o">=</span><span class="s">"https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/HackTimer.js"</span><span class="o">></</span><span class="n">script</span><span class="o">></span>
- <span class="o"><</span><span class="n">script</span> <span class="n">src</span><span class="o">=</span><span class="s">"https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/statecharts_core.js"</span><span class="o">></</span><span class="n">script</span><span class="o">></span>
- <span class="o"><</span><span class="n">script</span> <span class="n">src</span><span class="o">=</span><span class="s">"https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/utils.js"</span><span class="o">></</span><span class="n">script</span><span class="o">></span>
- <span class="o"><</span><span class="n">script</span> <span class="n">src</span><span class="o">=</span><span class="s">"https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/svg.js"</span><span class="o">></</span><span class="n">script</span><span class="o">></span>
- <span class="o"><</span><span class="n">script</span> <span class="n">src</span><span class="o">=</span><span class="s">"https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/ui.js"</span><span class="o">></</span><span class="n">script</span><span class="o">></span>
- <span class="o"><</span><span class="n">script</span> <span class="n">src</span><span class="o">=</span><span class="s">"target_js/target.js"</span><span class="o">></</span><span class="n">script</span><span class="o">></span>
- <span class="o"><</span><span class="n">script</span><span class="o">></span>
- <span class="n">controller</span> <span class="o">=</span> <span class="n">new</span> <span class="n">Target</span><span class="o">.</span><span class="n">Controller</span><span class="p">(</span><span class="n">new</span> <span class="n">JsEventLoop</span><span class="p">());</span>
- <span class="n">controller</span><span class="o">.</span><span class="n">start</span><span class="p">();</span>
- <span class="o"></</span><span class="n">script</span><span class="o">></span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="section" id="gameloop">
- <h2>Gameloop<a class="headerlink" href="#gameloop" title="Permalink to this headline">¶</a></h2>
- <p>The <code class="docutils literal"><span class="pre">Gameloop</span></code> platform works in combination with a game engine, which calls the <code class="docutils literal"><span class="pre">update</span></code> function of the controller at regular intervals.</p>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="index.html">Table Of Contents</a></h3>
- <ul>
- <li><a class="reference internal" href="#">Runtime Platforms</a><ul>
- <li><a class="reference internal" href="#threads">Threads</a></li>
- <li><a class="reference internal" href="#eventloop">Eventloop</a><ul>
- <li><a class="reference internal" href="#python">Python</a></li>
- <li><a class="reference internal" href="#javascript">Javascript</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#gameloop">Gameloop</a></li>
- </ul>
- </li>
- </ul>
- <h4>Previous topic</h4>
- <p class="topless"><a href="compiler.html"
- title="previous chapter">Compiler</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="examples.html"
- title="next chapter">Examples</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/runtime_platforms.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
- <div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
- </div>
- <script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Examples"
- >next</a> |</li>
- <li class="right" >
- <a href="compiler.html" title="Compiler"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">SCCD 0.9 documentation</a> »</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2016, Simon Van Mierlo.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.6.
- </div>
- </body>
- </html>
|