traces will be dumped. The program stops and waits for one character of
input at the beginning and end of the interval.
- $Id: worm.c,v 1.49 2007/09/29 17:35:57 tom Exp $
+ $Id: worm.c,v 1.51 2008/01/13 01:03:23 tom Exp $
*/
#include <test.priv.h>
#endif
} WORM;
+static unsigned long sequence = 0;
+static bool quitting = FALSE;
+
static WORM worm[40];
static short **refs;
#endif
#ifdef USE_PTHREADS
+static bool
+quit_worm(void)
+{
+ napms(10); /* let the other thread(s) have a chance */
+ return quitting;
+}
+
static void *
start_worm(void *arg)
{
- for (;;) {
- napms(20);
- use_window(stdscr, draw_worm, arg);
+ unsigned long compare = 0;
+ while (!quit_worm()) {
+ while (compare < sequence) {
+ ++compare;
+ use_window(stdscr, draw_worm, arg);
+ }
}
return NULL;
}
}
}
}
- napms(10);
refresh();
nodelay(stdscr, TRUE);
while (!done) {
int ch;
+ ++sequence;
if ((ch = getch()) > 0) {
#ifdef TRACE
if (trace_start || trace_end) {
* normal operation -T.Dickey
*/
if (ch == 'q') {
+ quitting = TRUE;
done = TRUE;
continue;
} else if (ch == 's') {
free(w->xpos);
free(w->ypos);
}
+#endif
+#ifdef USE_PTHREADS
+ /*
+ * Do this just in case one of the threads did not really exit.
+ */
+ for (n = 0; n < number; n++) {
+ pthread_join(worm[n].thread, NULL);
+ }
#endif
ExitProgram(EXIT_SUCCESS);
}