Function silc_fsm_thread_alloc
SYNOPSIS
SilcFSMThread silc_fsm_thread_alloc(SilcFSM fsm,
void *thread_context,
SilcFSMThreadDestructor destructor,
void *destructor_context,
SilcBool real_thread);
DESCRIPTION
Allocates FSM thread context. The thread will be executed in the
FSM machine indicated by `fsm'. The caller must free the returned
thread context with silc_fsm_free. If the 'real_thread' is TRUE
then the thread will actually be executed in real thread, if platform
supports them. The `thread_context' is delivered to every state
function in the thread.
NOTES
If the system does not support threads, then this function will revert
back to normal FSM threads.
If the `real_thread' is TRUE then FSM will allocate new SilcSchedule
for the FSM thread. If you need scheduler in the real thread it is
strongly recommended that you use the SilcSchedule that is allocated
for the thread. You can retrieve the SilcSchedule from the thread
using silc_fsm_get_schedule function. Note that, the allocated
SilcSchedule will become invalid after the thread finishes.
If `real_thread' is FALSE the silc_fsm_get_schedule will return
the SilcSchedule that was originally given to silc_fsm_alloc or
silc_fsm_init.
EXAMPLE
SILC_FSM_STATE(silc_foo_state)
{
SilcFSMThread thread;
...
// Execute the route lookup in thread
thread = silc_fsm_thread_alloc(fsm, fsm_context, NULL, NULL, FALSE);
silc_fsm_start(thread, silc_route_lookup_start);
// Wait here for the thread to terminate. Set the state where to go
// after the thread has terminated.
silc_fsm_next(fsm, silc_foo_route_lookup_finished);
SILC_FSM_THREAD_WAIT(thread);
}
|