ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.pod
(Generate patch)

Comparing libev/ev.pod (file contents):
Revision 1.465 by root, Sun Mar 22 15:13:17 2020 UTC vs.
Revision 1.466 by root, Mon Jun 8 11:15:59 2020 UTC

3862event loop thread and an unspecified mechanism to wake up the main thread. 3862event loop thread and an unspecified mechanism to wake up the main thread.
3863 3863
3864First, you need to associate some data with the event loop: 3864First, you need to associate some data with the event loop:
3865 3865
3866 typedef struct { 3866 typedef struct {
3867 mutex_t lock; /* global loop lock */ 3867 pthread_mutex_t lock; /* global loop lock */
3868 pthread_t tid;
3869 pthread_cond_t invoke_cv;
3868 ev_async async_w; 3870 ev_async async_w;
3869 thread_t tid;
3870 cond_t invoke_cv;
3871 } userdata; 3871 } userdata;
3872 3872
3873 void prepare_loop (EV_P) 3873 void prepare_loop (EV_P)
3874 { 3874 {
3875 // for simplicity, we use a static userdata struct. 3875 // for simplicity, we use a static userdata struct.
3876 static userdata u; 3876 static userdata u;
3877 3877
3878 ev_async_init (&u->async_w, async_cb); 3878 ev_async_init (&u.async_w, async_cb);
3879 ev_async_start (EV_A_ &u->async_w); 3879 ev_async_start (EV_A_ &u.async_w);
3880 3880
3881 pthread_mutex_init (&u->lock, 0); 3881 pthread_mutex_init (&u.lock, 0);
3882 pthread_cond_init (&u->invoke_cv, 0); 3882 pthread_cond_init (&u.invoke_cv, 0);
3883 3883
3884 // now associate this with the loop 3884 // now associate this with the loop
3885 ev_set_userdata (EV_A_ u); 3885 ev_set_userdata (EV_A_ &u);
3886 ev_set_invoke_pending_cb (EV_A_ l_invoke); 3886 ev_set_invoke_pending_cb (EV_A_ l_invoke);
3887 ev_set_loop_release_cb (EV_A_ l_release, l_acquire); 3887 ev_set_loop_release_cb (EV_A_ l_release, l_acquire);
3888 3888
3889 // then create the thread running ev_run 3889 // then create the thread running ev_run
3890 pthread_create (&u->tid, 0, l_run, EV_A); 3890 pthread_create (&u.tid, 0, l_run, EV_A);
3891 } 3891 }
3892 3892
3893The callback for the C<ev_async> watcher does nothing: the watcher is used 3893The callback for the C<ev_async> watcher does nothing: the watcher is used
3894solely to wake up the event loop so it takes notice of any new watchers 3894solely to wake up the event loop so it takes notice of any new watchers
3895that might have been added: 3895that might have been added:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines