// // destructor // // destroy structs for leaving program // open question: should we stop here childs? // Asger says no: I like to have my xdvi open after closing LyX. Maybe // I want to print or something.
SystemcallsSingletoncontroller::~SystemcallsSingletoncontroller()
{
ControlledCalls *next; while (SysCalls)
{
next = SysCalls->next; delete SysCalls;
SysCalls = next;
}
}
// // Add childprocessinformation into controlled list //
void
SystemcallsSingletoncontroller::AddCall(Systemcalls const &newcall)
{ // not yet implemented
ControlledCalls *newCall = new ControlledCalls; if (newCall == NULL) // sorry, no idea return;
newCall->next = SysCalls;
newCall->call = new Systemcalls(newcall);
SysCalls = newCall;
}
// // Timer-call // // Check list, if there is a stopped child. If yes, call-back. //
void
SystemcallsSingletoncontroller::Timer()
{ // check each entry of our list, if it's finished
ControlledCalls *prev = NULL; for (ControlledCalls *actCall=SysCalls; actCall; actCall=actCall->next)
{
pid_t pid=actCall->call->Getpid(); int stat_loc;
waitpid(pid, &stat_loc, WNOHANG); if (WIFEXITED(stat_loc) || WIFSIGNALED(stat_loc)) { // Ok, the return value goes into retval. if (WIFEXITED(stat_loc)) {
actCall->call->setRetValue(WEXITSTATUS(stat_loc));
} else { // Child died, so pretend it returned 1
actCall->call->setRetValue(1);
} // callback and release
actCall->call->Callback(); if (actCall == SysCalls) {
SysCalls = actCall->next;
} else {
prev->next = actCall->next;
} delete actCall;
actCall = prev;
}
prev = actCall;
}
}
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.