summaryrefslogtreecommitdiffstats
path: root/doc/html/timers.html
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-07-10 15:24:15 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-07-10 15:24:15 -0500
commitbd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch)
tree7a520322212d48ebcb9fbe1087e7fca28b76185c /doc/html/timers.html
downloadqt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz
qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip
Add Qt3 development HEAD version
Diffstat (limited to 'doc/html/timers.html')
-rw-r--r--doc/html/timers.html152
1 files changed, 152 insertions, 0 deletions
diff --git a/doc/html/timers.html b/doc/html/timers.html
new file mode 100644
index 0000000..eff5bb9
--- /dev/null
+++ b/doc/html/timers.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!-- /home/espenr/tmp/qt-3.3.8-espenr-2499/qt-x11-free-3.3.8/doc/object.doc:86 -->
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Timers</title>
+<style type="text/css"><!--
+fn { margin-left: 1cm; text-indent: -1cm; }
+a:link { color: #004faf; text-decoration: none }
+a:visited { color: #672967; text-decoration: none }
+body { background: #ffffff; color: black; }
+--></style>
+</head>
+<body>
+
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr bgcolor="#E5E5E5">
+<td valign=center>
+ <a href="index.html">
+<font color="#004faf">Home</font></a>
+ | <a href="classes.html">
+<font color="#004faf">All&nbsp;Classes</font></a>
+ | <a href="mainclasses.html">
+<font color="#004faf">Main&nbsp;Classes</font></a>
+ | <a href="annotated.html">
+<font color="#004faf">Annotated</font></a>
+ | <a href="groups.html">
+<font color="#004faf">Grouped&nbsp;Classes</font></a>
+ | <a href="functions.html">
+<font color="#004faf">Functions</font></a>
+</td>
+<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table><h1 align=center>Timers</h1>
+
+
+
+<p> <a href="qobject.html">QObject</a>, the base class of all Qt objects, provides the basic timer
+support in Qt. With <a href="qobject.html#startTimer">QObject::startTimer</a>(), you start a timer with
+an <em>interval</em> in milliseconds as argument. The function returns a
+unique integer timer id. The timer will now "fire" every <em>interval</em>
+milliseconds, until you explicitly call <a href="qobject.html#killTimer">QObject::killTimer</a>() with
+the timer id.
+<p> For this mechanism to work, the application must run in an event
+loop. You start an event loop with <a href="qapplication.html#exec">QApplication::exec</a>(). When a
+timer fires, the application sends a <a href="qtimerevent.html">QTimerEvent</a>, and the flow of
+control leaves the event loop until the timer event is processed. This
+implies that a timer cannot fire while your application is busy doing
+something else. In other words: the accuracy of timers depends on the
+granularity of your application.
+<p> There is practically no upper limit for the interval value (more than
+one year is possible). The accuracy depends on the underlying operating
+system. Windows 95/98 has 55 millisecond (18.2 times per second)
+accuracy; other systems that we have tested (UNIX X11 and Windows NT)
+can handle 1 millisecond intervals.
+<p> The main API for the timer functionality is <a href="qtimer.html">QTimer</a>. That class
+provides regular timers that emit a signal when the timer fires, and
+inherits <a href="qobject.html">QObject</a> so that it fits well into the ownership structure
+of most GUI programs. The normal way of using it is like this:
+<pre>
+ <a href="qtimer.html">QTimer</a> * counter = new <a href="qtimer.html">QTimer</a>( this );
+ connect( counter, SIGNAL(<a href="qtimer.html#timeout">timeout</a>()),
+ this, SLOT(updateCaption()) );
+ counter-&gt;<a href="qtimer.html#start">start</a>( 1000 );
+</pre>
+
+<p> The counter timer is made into a child of this widget, so that when
+this widget is deleted, the timer is deleted too. Next, its timeout
+signal is connected to the slot that will do the work, and finally
+it's started.
+<p> <a href="qtimer.html">QTimer</a> also provides a simple one-shot timer API. <a href="qbutton.html">QButton</a> uses this
+to show the button being pressed down and then (0.1 seconds later) be
+released when the keyboard is used to "press" a button, for example:
+<p> <pre>
+ QTimer::<a href="qtimer.html#singleShot">singleShot</a>( 100, this, SLOT(animateTimeout()) );
+</pre>
+
+<p> 0.1 seconds after this line of code is executed, the same button's
+animateTimeout() slot is called.
+<p> Here is an outline of a slightly longer example that combines object
+communication via signals and slots with a QTimer object. It
+demonstrates how to use timers to perform intensive calculations in a
+single-threaded application without blocking the user interface.
+<p> <pre>
+ // The Mandelbrot class uses a QTimer to calculate the mandelbrot
+ // set one scanline at a time without blocking the CPU. It
+ // inherits QObject to use signals and slots. Calling start()
+ // starts the calculation. The done() signal is emitted when it
+ // has finished. Note that this example is not complete, just an
+ // outline.
+
+ class Mandelbrot : public <a href="qobject.html">QObject</a>
+ {
+ <a href="metaobjects.html#Q_OBJECT">Q_OBJECT</a> // required for signals/slots
+ public:
+ Mandelbrot( <a href="qobject.html">QObject</a> *parent=0, const char *name );
+ ...
+ public slots:
+ void start();
+ signals:
+ void done();
+ private slots:
+ void calculate();
+ private:
+ <a href="qtimer.html">QTimer</a> timer;
+ ...
+ };
+
+ //
+ // Constructs and initializes a Mandelbrot object.
+ //
+
+ Mandelbrot::Mandelbrot( <a href="qobject.html">QObject</a> *parent=0, const char *name )
+ : <a href="qobject.html">QObject</a>( parent, name )
+ {
+ <a href="qobject.html#connect">connect</a>( &amp;timer, SIGNAL(<a href="qtimer.html#timeout">timeout</a>()), SLOT(calculate()) );
+ ...
+ }
+
+ //
+ // Starts the calculation task. The internal calculate() slot
+ // will be activated every 10 milliseconds.
+ //
+
+ void Mandelbrot::start()
+ {
+ if ( !timer.<a href="qtimer.html#isActive">isActive</a>() ) // not already running
+ timer.<a href="qtimer.html#start">start</a>( 10 ); // timeout every 10 ms
+ }
+
+ //
+ // Calculates one scanline at a time.
+ // Emits the done() signal when finished.
+ //
+
+ void Mandelbrot::calculate()
+ {
+ ... // perform the calculation for a scanline
+ if ( finished ) { // no more scanlines
+ timer.<a href="qtimer.html#stop">stop</a>();
+ emit done();
+ }
+ }
+ </pre>
+
+<p>
+<!-- eof -->
+<p><address><hr><div align=center>
+<table width=100% cellspacing=0 border=0><tr>
+<td>Copyright &copy; 2007
+<a href="troll.html">Trolltech</a><td align=center><a href="trademarks.html">Trademarks</a>
+<td align=right><div align=right>Qt 3.3.8</div>
+</table></div></address></body>
+</html>