スレッドの生成には、pthread_create
を使います。
関数ポインタはvoid (*f)()
のように宣言します。これは、引数も戻り値も無い関数を指すポインターになります。変数名はf
です。
無限ループで、この関数ポインターに、print_chars
とprint_reversed_chars
を交互にセットします。
メインスレッドが終了すると、プロセスが終了します。
pthread_create
の第4引数には、スレッド関数に渡す引数をポインターとして指定しますが、これには1つしか指定できないので注意が必要です。
以下のコードは、スレッドと関数ポインターを使った例です。
2秒ごとに、print_chars
とprint_reversed_chars
を出力します。ENTERで終了します。
lang
1#include <stdio.h>
2#include <unistd.h>
3#include <pthread.h>
4
5void *show(void *arg);
6void print_chars();
7void print_reversed_chars();
8
9void *show(void *arg)
10{
11 void (*f)();
12 int i;
13
14 for (i = 1; ;i *= -1)
15 {
16 f = (i == 1) ? print_chars : print_reversed_chars;
17 f();
18 sleep(2);
19 }
20}
21
22void print_chars()
23{
24 printf("print_chars\n");
25}
26
27void print_reversed_chars()
28{
29 printf("print_reversed_chars\n");
30}
31
32int main()
33{
34 pthread_t th;
35
36 if (pthread_create(&th, NULL, show, (void *)NULL) != 0)
37 {
38 printf("スレッドの生成に失敗\n");
39 }
40
41 // 何か入力するまで待機
42 getchar();
43
44 return 0;
45}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/10/29 11:29
2014/10/29 11:43
2014/10/30 11:44
2014/10/30 11:49