

ドキュメントを読んでもいまいち理解できませんでした。  
<http://linux.die.net/man/3/ev>

詳しい方がいましたら教えていただけると助かります。


CC BY-SA 3.0
2015-04-12T04:26:51.107
9066
2015-04-13T07:56:51.720
2015-04-12T08:59:50.560
3639
9072
question
linux socket
libevのev_asyncとは何に使用するものですか？


libevのドキュメントでしたら
[本家のREADME](http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod)
を参照するのが良いと思います。

**`ev_async`** は、マルチスレッド環境でイペントループに対して安全にイベントを通知する仕組みです。例えば、あるスレッドが
**`ev_run()`** しているイベントループに対して、別のスレッドからループの終了を通知したいといった目的で利用されます。

以下に **`ev_async`** を用いて、別スレッドからイベントループを終了させるサンプルのコードを載せておきます。（※
エラー処理など省略しています）

[code]

    #include <stdio.h>
    #include <unistd.h>
    #include <pthread.h>
    #include <ev.h>
    
    struct ev_loop *loop;
    struct ev_async shutdown_w;
    
    static void *
    thread_main (void *arg) {
        sleep(3);
        fprintf(stderr, "ev_async_send\n");
        ev_async_send(loop, &shutdown_w); // thread safe
        return NULL;
    }
    
    static void
    on_shutdown (struct ev_loop *loop, struct ev_async *w, int revents) {
        fprintf(stderr, "on_shutdown\n");
        ev_break(loop, EVBREAK_ALL);
    }
    
    int
    main (int argc, char *argv[]) {
        pthread_t id;
    
        loop = ev_default_loop(0);
    
        ev_async_init(&shutdown_w, on_shutdown);
        ev_async_start(loop, &shutdown_w);
    
        pthread_create(&id, NULL, thread_main, NULL);
    
        fprintf(stderr, "ev_run: start\n");
        ev_run(loop, 0);
        fprintf(stderr, "ev_run: stop\n");
    
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2015-04-13T07:16:27.373
9104
2015-04-13T07:56:51.720
2015-04-13T07:56:51.720
1024
1024
9066
answer