void* vehicle_spawn() { int localThreadId; localThreadId = (int)pthread_self(); // Time at the start of process creation struct timeval startTime; // Time since process creation to current time int elapsed = 0; // Time at which last vehicle arrived int lastArrivalTime = 0; printf(" VehicleCreationProcess created. PID is: %d \n", localThreadId); gettimeofday(&startTime, NULL); elapsed = timeChange(startTime); srand (elapsed); while(1) { elapsed = timeChange(startTime); if(elapsed >= lastArrivalTime) { printf("Elapsed time: %d Arrival time: %d\n", elapsed, lastArrivalTime); if(lastArrivalTime > 0 ) { if(rand() % 100 < trackChance ) { //truck printf("Created a truck process\n"); pthread_create(&(vehicleThread[threadCounter]), NULL, truck, NULL); } else { //car printf("Created a car process\n"); pthread_create(&(vehicleThread[threadCounter]), NULL, car, NULL); } } lastArrivalTime += rand()% maxTimeToNextVehicleArrival; printf("Present time %d, next arrival time %d\n", elapsed, lastArrivalTime); } } printf("VehicleCreationProcess ended\n"); return 0; }
void VideoPlayer::handle_mpv_event(mpv_event *event) { switch (event->event_id) { case MPV_EVENT_GET_PROPERTY_REPLY: TimePosition = *(double*)((mpv_event_property*)event->data)->data * 1000; //emit positionChanged(TimePosition); timeChange(TimePosition); break; //case MPV_EVENT_PROPERTY_CHANGE: //TimePosition = *(double*)((mpv_event_property*)event->data)->data * 1000; //emit positionChanged(TimePosition); //break; default: break; } }
int main() { initialize(); printf("Welcome to Smaug World Simulator\n"); const int seed = 1; //askUserValue("Enter the random value seed"); const long int maximumCowInterval = 10000000;//askUserValue("Enter maximumCowInterval in (us)"); const long int maximumThiefInterval = 10000000;//askUserValue("Enter maximumThiefInterval in (us)"); const long int maximumHunterInterval = 10000000;//askUserValue("Enter maximumHunterInterval in (us)"); const long int maximumSheepInterval = 10000000;//askUserValue("Enter maximumSheepInterval in (us)"); const int smaugWinChance = 50; //askUserValue("smaugWinProb (0 to 100)"); srand(seed); double cowTimer = 0; double sheepTimer = 0; double thiefTimer = 0; double hunterTimer = 0; parentProcessID = getpid(); smaugProcessID = -1; cowProcessGID = parentProcessID - 1; thiefProcessGID = parentProcessID - 2; hunterProcessGID = parentProcessID - 3; sheepProcessGID = parentProcessID - 4; pid_t childPID = fork(); if(childPID < 0) { printf("FORK FAILED\n"); return 1; } else if(childPID == 0) { smaug(smaugWinChance); // run the smaug return 0; } smaugProcessID = childPID; gettimeofday(&startTime, NULL); int zombieRemoveCounter = 0; // Variable to kill zombie while(*terminateFlagp == 0) { zombieRemoveCounter++; double simDuration = timeChange(startTime); if(cowTimer - simDuration <= 0) { cowTimer = simDuration + (rand() % maximumCowInterval) / 1000.0; printf("COW CREATED! next cow at: %f\n", cowTimer); int childPID = fork(); if(childPID == 0) { cow((rand() % maximumCowInterval) / 1000.0); return 0; } } if(thiefTimer - simDuration <= 0) { thiefTimer = simDuration + (rand() % maximumThiefInterval) / 1000.0; printf("THIEF CREATED! next thief at: %f\n", thiefTimer); int childPID = fork(); if(childPID == 0) { thief((rand() % maximumThiefInterval) / 1000.0); return 0; } } if(hunterTimer - simDuration <= 0) { hunterTimer = simDuration + (rand() % maximumHunterInterval) / 1000.0; printf("HUNTER CREATED! next hunter at: %f\n", hunterTimer); int childPID = fork(); if(childPID == 0) { hunter((rand() % maximumHunterInterval) / 1000.0); return 0; } } if(sheepTimer - simDuration <= 0) { sheepTimer = simDuration + (rand() % maximumSheepInterval) / 1000.0; printf("SHEEP CREATED! next sheep at: %f\n", sheepTimer); int childPID = fork(); if(childPID == 0) { sheep((rand() % maximumSheepInterval) / 1000.0); return 0; } } // remove zombie processes once in a 10 runs ~ at most 10 process if(zombieRemoveCounter % 10 == 0) { zombieRemoveCounter -= 10; int w = 0; int status = 0; while( (w = waitpid( -1, &status, WNOHANG)) > 1) { printf("REAPED zombie process %d from main loop\n", w); } } } terminateSimulation(); return 0; }
int main() { // int k; // int temp; /* variables to hold process ID numbers */ int parentPID = 0; int cowPID = 0; int sheepPID = 0; int smaugPID = 0; /* local counters, keep track of total number */ /* of processes of each type created */ int cowsCreated = 0; int sheepCreated = 0; /* Variables to control the time between the arrivals */ /* of successive beasts*/ // double minwait = 0; int newSeed = 0; int sleepingTime = 0; int maxCowIntervalUsec = 0; int maxSheepIntervalUsec = 0; int nextInterval = 0.0; int status; int w = 0; double maxCowInterval = 0.0; double totalCowInterval = 0.0; double maxSheepInterval = 0.0; double totalSheepInterval = 0.0; double elapsedTime; // double hold; parentPID = getpid(); setpgid(parentPID, parentPID); parentProcessGID = getpgid(0); printf("CRCRCRCRCRCRCRCRCRCRCRCR main process group %d %d\n", parentPID, parentProcessGID); /* initialize semaphores and allocate shared memory */ initialize(); /* inialize each variable in shared memory */ *cowCounterp = 0; *cowsEatenCounterp = 0; *sheepCounterp = 0; *sheepEatenCounterp = 0; *mealWaitingFlagp = 0; printf("Please enter a random seed to start the simulation\n"); scanf("%d", &newSeed); srand(newSeed); printf("Please enter the maximum interval length for cow (ms)\n"); scanf("%lf", &maxCowInterval); printf("max Cow interval time %f \n", maxCowInterval); maxCowIntervalUsec = (int)maxCowInterval * 1000; printf("Please enter the maximum interval length for sheep (ms)\n"); scanf("%lf", &maxSheepInterval); printf("max Sheep interval time %f \n", maxSheepInterval); maxSheepIntervalUsec = (int)maxSheepInterval * 1000; gettimeofday(&startTime, NULL); if ((smaugPID = fork()) == 0) { printf("CRCRCRCRCRCRCRCRCRCRCRCR Smaug is born\n"); smaug(); printf("CRCRCRCRCRCRCRCRCRCRCRCR Smaug dies\n"); exit(0); } else { if (smaugProcessID == -1) { smaugProcessID = smaugPID; } setpgid(smaugPID, smaugProcessID); printf("CRCRCRCRCRCRCRCRCRCRCRCR Smaug PID %8d PGID %8d\n", smaugPID, smaugProcessID); } printf("CRCRCRCRCRCRCRCRCRCRCRCR Smaug PID create cow %8d \n", smaugPID); usleep(10); while (TRUE) { semopChecked(semID, &WaitProtectTerminate, 1); if (*terminateFlagp != 0) { semopChecked(semID, &SignalProtectTerminate, 1); break; } semopChecked(semID, &SignalProtectTerminate, 1); /* Create a cow process if needed */ /* The condition used to determine if a process is needed is */ /* if the last cow created will be enchanted */ elapsedTime = timeChange(startTime); if (totalCowInterval - elapsedTime < totalCowInterval) { nextInterval = (int)((double)rand() / RAND_MAX * maxCowIntervalUsec); totalCowInterval += nextInterval / 1000.0; sleepingTime = (int)((double)rand() / RAND_MAX * maxCowIntervalUsec); if ((cowPID = fork()) == 0) { /* Child becomes a beast */ elapsedTime = timeChange(startTime); cow(sleepingTime); /* Child (beast) quits after being consumed */ exit(0); } else if (cowPID > 0) { cowsCreated++; if (cowProcessGID == -1) { cowProcessGID = cowPID; printf("CRCRCRCRCR %8d CRCRCRCRCR cow PGID %8d \n", cowPID, cowProcessGID); } setpgid(cowPID, cowProcessGID); printf("CRCRCRCRCRCRCRCRCRCRCRCR NEW COW CREATED %8d \n", cowsCreated); } else { printf("CRCRCRCRCRCRCRCRCRCRCRCR cow process not created \n"); continue; } } /* Create a sheep process if needed */ /* The condition used to determine if a process is needed is */ /* if the last sheep created will be enchanted */ elapsedTime = timeChange(startTime); if (totalSheepInterval - elapsedTime < totalSheepInterval) { nextInterval = (int)((double)rand() / RAND_MAX * maxSheepIntervalUsec); totalCowInterval += nextInterval / 1000.0; sleepingTime = (int)((double)rand() / RAND_MAX * maxSheepIntervalUsec); if ((sheepPID = fork()) == 0) { /* Child becomes a beast */ elapsedTime = timeChange(startTime); sheep(sleepingTime); /* Child (beast) quits after being consumed */ exit(0); } else if (sheepPID > 0) { sheepCreated++; if (sheepProcessGID == -1) { sheepProcessGID = sheepPID; printf("CRCRCRCRCR %8d CRCRCRCRCR sheep PGID %8d \n", sheepPID, sheepProcessGID); } setpgid(sheepPID, sheepProcessGID); printf("CRCRCRCRCRCRCRCRCRCRCRCR NEW SHEEP CREATED %8d \n", sheepCreated); } else { printf("CRCRCRCRCRCRCRCRCRCRCRCR sheep process not created \n"); continue; } } /* wait for processes that have exited so we do not accumulate zombie or cows */ while ((w = waitpid(-1, &status, WNOHANG)) > 1) { if (WIFEXITED(status)) { if (WEXITSTATUS(status) > 0) { printf("exited, status=%8d\n", WEXITSTATUS(status)); terminateSimulation(); printf("GOODBYE from main process %8d\n", getpid()); exit(0); } else { printf(" REAPED process %8d\n", w); } } } /* terminateFlagp is set to 1 (from initial value of 0) when any */ /* termination condition is satisfied */ if (*terminateFlagp == 1) break; /* sleep for 80% of the cow interval */ /* then try making more processes */ usleep((totalCowInterval * 800)); } if (*terminateFlagp == 1) { terminateSimulation(); } printf("GOODBYE from main process %8d\n", getpid()); exit(0); }