// The main computation loop
while (true)
{
-
- if (runstate != RUN) pthread_exit(NULL); //Check whether the thread needs to exit
-
-
-
//Check whether the program should quit due to steps being computed, or a timeout
if (ExitCondition())
{
QuitProgram(false);
- continue; // The check at the start of the next loop will stop the thread
+ pthread_exit(NULL);
}
if (options.draw_graphics == false && options.verbosity != 0
Compute();
}
+ //printf("Left compute loop\n");
}
#pragma omp section
{
if (options.draw_graphics)
Graphics_Run(argc, argv);
- printf("Got to bit after Graphics_Run()\n");
+ //printf("Got to bit after Graphics_Run()\n");
}
}
//Check whether the program should quit due to steps being computed, or a timeout
if (ExitCondition())
{
- glutLeaveMainLoop();
+ //printf("Leave graphics loop\n");
+ glutLeaveMainLoop();
return;
}
-
#ifdef SINGLE_THREADED
if (options.verbosity != 0 && universe.steps % options.verbosity == 1)
DisplayStatistics();
System_Compute(&universe);
#endif
-
-
- //Check whether the runstate has been set to quit the program
- switch (runstate)
- {
- case RUN:
- break;
- case QUIT:
- glutLeaveMainLoop();
- return;
- break;
- case QUIT_ERROR:
- glutLeaveMainLoop();
- return;
- break;
- }
-
if (options.draw_graphics == false)
return;
{
if (theKey == 'x' || theKey == 'X')
{
- glutLeaveMainLoop();
+ QuitProgram(false);
return;
}
*/
bool ExitCondition(void)
{
- return ((options.timeout > 0.00 && ((unsigned)(time(NULL) - options.start_time.tv_sec) >= options.timeout))
+ return (runstate != RUN || (options.timeout > 0.00 && ((unsigned)(time(NULL) - options.start_time.tv_sec) >= options.timeout))
|| (options.num_steps > 0 && universe.steps > options.num_steps));
}