www.pudn.com > truetime-1.2-compiled.zip > createevent.cpp


#ifndef CREATE_EVENT
#define CREATE_EVENT

#include "getnode.cpp"

// Create a free event
bool ttCreateEvent(char *name) {

  DataNode *dn;
  Event* e;

  if (strcmp(name, "") == 0) {
    MEX_ERROR("ttCreateEvent: Name should be a non-empty string!");
    return false;
  }
  if (rtsys->prioFcn == NULL) {
    MEX_ERROR("ttCreateEvent: Kernel must be initialized before creation of events!");
    return false;
  }
  dn = getNode(name, rtsys->eventList);
  if (dn != NULL) {
    MEX_ERROR("ttCreateEvent: Name of event not unique!");
    return false;
  }

  e = new Event(name, true, NULL);
  e->waitingQ = new List("WaitingQ", rtsys->prioSort); // Sort waiting tasks by priority function
  rtsys->eventList->appendNode(new DataNode(e, e->name));
  return true;
}

// Create an event associated with a monitor
void ttCreateEvent(char *name, char *monitor) {

  DataNode *dn;
  Event* e;
  Monitor* mon;

  dn = getNode(monitor, rtsys->monitorList);
  if (dn==NULL) {
    // Monitor does not exist 
    char buf[200];
    sprintf(buf, "ttCreateEvent: Non-existent monitor '%s'!", monitor);
    MEX_ERROR(buf);
    return;
  }
  
  if (ttCreateEvent(name)) {
    mon = (Monitor*) dn->data;
    dn = (DataNode*) rtsys->eventList->getLast();
    e = (Event*) dn->data;
    e->mon = mon;
    e->isFree = false;
  }
}


#endif