2013-03-27 5 views
3

이벤트 기반 프로그래밍에 libev를 사용하려고합니다. 하지만 libev에서 제공하는 이벤트가 있습니다. EV_READ, EV_WRITE, EV_TIMER ..libev 맞춤 이벤트

내 맞춤 이벤트가있을 수 있습니다.

예를 들어, 나는 그 메시지 흐름에서 메시지의 유형에만 관심이있는 소켓에서 메시지의 연속 흐름을가집니다. 그래서, 그것은 기본적으로

while(true) 
{ 
    Msg msg = getMessage(); 
    if(msg != null && msg.id == ourId) 
     return msg; 
} 

그래서, 나는 이런 종류의 이벤트를 등록 할 좋아 (해당 if 조건을 만족한다.). 그것의 맞춤 이벤트 권리? 이 이벤트를 libev에 어떻게 지정해야합니까?

나는 우리가 다음과 같이 지정 libev에 의미 ..

ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ); 
ev_io_start (loop, &stdin_watcher); 

나는 우리가 우리 자신의 이벤트를 확인 할 수있는 모든 물건을 볼 수가 타격. 가능한가?

답변

2

불행히도 libev가 데이터를 조작하지 않기 때문에 불행히도 사용자 정의 이벤트를 가질 수 없으며 일부 이벤트가 있는지 확인하거나 일부 이벤트 만 보낼 수 있습니다. 푸시가

  • 경우 예 : 감시자가 함수를 발생하는 경우, 메시지가 당신이 원하는이 있는지 확인

    1. EV_READ
    2. 와 감시자 만들기 : 그러니까 기본적으로

      , 당신은해야합니다 귀하의 메시지가없는 경우, 그냥
  • 실행를 건너
  • 대기열, 이상적으로는 EV_ONESHOT 및 시간 초과 관찰자로 구성됩니다. 메시지 처리기를 호출하면 메시지 대기열을 검사하고 대기열에있는 모든 메시지를 처리합니다.