Как вызвать события EPOLLIN и EPOLLOUT? - PullRequest
0 голосов
/ 11 октября 2019

Я пишу программу на основе Epoll, в которой я хочу читать объект хеш-карты, как только к нему добавляются данные, используя потоки и события epoll.

Может кто-нибудь дать здесь объяснение илиукажи мне хороший учебник высокого уровня о том, как работает epoll.

#include <iostream>
#include <thread>`enter code here`
#include <iterator> 
#include <map> 
#define MAX_EVENTS 5
#define READ_SIZE 10
#include <stdio.h>     // for fprintf()
#include <unistd.h>    // for close(), read()
#include <sys/epoll.h> // for epoll_create1(), epoll_ctl(), struct epoll_event
#include <string.h>  

std::map<int, std::string> mp; 
std::map<int, std::string>::iterator it = mp.begin();


void set()
{
    mp.insert(std::make_pair(1,"earth"));
    mp.insert(std::make_pair(2,"moon")); 
     std::cout<<"Inserted"<<std::endl;   
}


void get()
{    
        for (auto itr = mp.begin(); itr != mp.end(); ++itr) { 
        std::cout << itr->first << '\t' << itr->second << '\n'; 
    } 

}

int main()  
{

    struct epoll_event event;
    int epoll_fd = epoll_create1(0);

    event.events = EPOLLIN | EPOLLOUT; 

    std::thread threadObj1(set);

    std::thread threadObj2(get);
    threadObj1.join(); 
    threadObj2.join(); 

    return 0;
}

1 Ответ

0 голосов
/ 11 октября 2019

Обычно с epoll вы просите его начать прослушивать события в файловых дескрипторах, представляющих сокеты, так же, как вы это делали бы с select.

В этом случае вместо сокетов вам нужен FDэто «поддельно», так что вы можете «вызвать» его по желанию, чтобы представить некоторые измененные условия без фактической отправки каких-либо данных.

Это то, для чего eventfd .

...