1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
|
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
void *incrementCounter(void *counter_ptr) {
int *counter = (int *)counter_ptr;
while(1) {
printf("%d\n", *counter);
sleep(1);
(*counter)++;
}
}
void *readNumber(void *counter_ptr) {
int number;
while(1) {
int* counter = (int *)counter_ptr;
if(scanf("%d", &number) == 1) {
printf("Erhöhe den Zähler um %d\n", (int)number);
(*counter) = (*counter) + number;
}
else {
printf("Es können nur natürliche Zahlen eingegeben werden!\n");
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
;
}
}
}
void sig_handler(int signo) {
if (signo == SIGINT) {
pthread_exit(NULL);
}
}
int main () {
int counter = 0;
if (signal(SIGINT, sig_handler) == SIG_ERR)
printf("\ncan't catch SIGINT\n");
pthread_t p1, p2;
pthread_create (&p1, NULL, incrementCounter, &counter);
pthread_create (&p2, NULL, readNumber, &counter);
pthread_join (p1, NULL);
pthread_join (p2, NULL);
printf ("\n");
return 0;
} |