/
html/
<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.51
     from ProgrammersManual.texinfo on 4 March 1997 -->

<TITLE>LambdaMOO Programmer's Manual - Forking</TITLE>
</HEAD>
<BODY>
Go to the <A HREF="ProgrammersManual_1.html">first</A>, <A HREF="ProgrammersManual_36.html">previous</A>, <A HREF="ProgrammersManual_38.html">next</A>, <A HREF="ProgrammersManual_77.html">last</A> section, <A HREF="ProgrammersManual_toc.html">table of contents</A>.
<P><HR><P>


<H3><A NAME="SEC37" HREF="ProgrammersManual_toc.html#TOC37">Executing Statements at a Later Time</A></H3>

<P>
It is sometimes useful to have some sequence of statements execute at a later
time, without human intervention.  For example, one might implement an object
that, when thrown into the air, eventually falls back to the ground; the
<SAMP>`throw'</SAMP> verb on that object should arrange to print a message about the
object landing on the ground, but the message shouldn't be printed until some
number of seconds have passed.

</P>
<P>
The <SAMP>`fork'</SAMP> statement is intended for just such situations and has the
following syntax:

</P>

<PRE>
fork (<VAR>expression</VAR>)
  <VAR>statements</VAR>
endfork
</PRE>

<P>
The <SAMP>`fork'</SAMP> statement first executes the expression, which must return a
integer; call that integer <VAR>n</VAR>.  It then creates a new MOO <STRONG>task</STRONG> that
will, after at least <VAR>n</VAR> seconds, execute the statements.  When the new
task begins, all variables will have the values they had at the time the
<SAMP>`fork'</SAMP> statement was executed.  The task executing the <SAMP>`fork'</SAMP>
statement immediately continues execution.  The concept of tasks is discussed
in detail in the next section.

</P>
<P>
By default, there is no limit to the number of tasks any player may fork, but
such a limit can be imposed from within the database.  See the chapter on
server assumptions about the database for details.

</P>
<P>
Occasionally, one would like to be able to kill a forked task before it even
starts; for example, some player might have caught the object that was thrown
into the air, so no message should be printed about it hitting the ground.  If
a variable name is given after the <SAMP>`fork'</SAMP> keyword, like this:

</P>

<PRE>
fork <VAR>name</VAR> (<VAR>expression</VAR>)
  <VAR>statements</VAR>
endfork
</PRE>

<P>
then that variable is assigned the <STRONG>task ID</STRONG> of the newly-created task.
The value of this variable is visible both to the task executing the fork
statement and to the statements in the newly-created task.  This ID can be
passed to the <CODE>kill_task()</CODE> function to keep the task from running and
will be the value of <CODE>task_id()</CODE> once the task begins execution.

</P>
<P><HR><P>
Go to the <A HREF="ProgrammersManual_1.html">first</A>, <A HREF="ProgrammersManual_36.html">previous</A>, <A HREF="ProgrammersManual_38.html">next</A>, <A HREF="ProgrammersManual_77.html">last</A> section, <A HREF="ProgrammersManual_toc.html">table of contents</A>.
</BODY>
</HTML>