|
28 | 28 | #defineOPS_FORMAT"%9.3f ops/sec" |
29 | 29 |
|
30 | 30 | /* These are macros to avoid timing the function call overhead. */ |
| 31 | +#ifndefWIN32 |
31 | 32 | #defineSTART_TIMER\ |
32 | 33 | do { \ |
33 | 34 | alarm_triggered = false; \ |
34 | 35 | alarm(secs_per_test); \ |
35 | 36 | gettimeofday(&start_t, NULL); \ |
36 | 37 | } while (0) |
| 38 | +#else |
| 39 | +#defineSTART_TIMER\ |
| 40 | +do { \ |
| 41 | +alarm_triggered = false; \ |
| 42 | +if (CreateThread(NULL, 0, process_alarm, NULL, 0, NULL) == \ |
| 43 | +INVALID_HANDLE_VALUE) \ |
| 44 | +{ \ |
| 45 | +fprintf(stderr, "Cannot create thread for alarm\n"); \ |
| 46 | +exit(1); \ |
| 47 | +} \ |
| 48 | +gettimeofday(&start_t, NULL); \ |
| 49 | +} while (0) |
| 50 | +#endif |
37 | 51 |
|
38 | 52 | #defineSTOP_TIMER\ |
39 | 53 | do { \ |
@@ -82,7 +96,9 @@ main(int argc, char *argv[]) |
82 | 96 | /* Prevent leaving behind the test file */ |
83 | 97 | signal(SIGINT,signal_cleanup); |
84 | 98 | signal(SIGTERM,signal_cleanup); |
| 99 | +#ifndefWIN32 |
85 | 100 | signal(SIGALRM,process_alarm); |
| 101 | +#endif |
86 | 102 | #ifdefSIGHUP |
87 | 103 | /* Not defined on win32 */ |
88 | 104 | signal(SIGHUP,signal_cleanup); |
@@ -553,7 +569,13 @@ print_elapse(struct timeval start_t, struct timeval stop_t, int ops) |
553 | 569 | staticvoid |
554 | 570 | process_alarm(intsig) |
555 | 571 | { |
| 572 | +#ifdefWIN32 |
| 573 | +sleep(secs_per_test); |
| 574 | +#endif |
556 | 575 | alarm_triggered= true; |
| 576 | +#ifdefWIN32 |
| 577 | +ExitThread(0); |
| 578 | +#endif |
557 | 579 | } |
558 | 580 |
|
559 | 581 | staticvoid |
|