本文整理汇总了C++中ThreadPool::Append方法的典型用法代码示例。如果您正苦于以下问题:C++ ThreadPool::Append方法的具体用法?C++ ThreadPool::Append怎么用?C++ ThreadPool::Append使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ThreadPool
的用法示例。
在下文中一共展示了ThreadPool::Append方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char *argv[])
{
int listenfd;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd < 0)
{
printf("socket error\n");
exit(-1);
}
struct sockaddr_in serv;
serv.sin_family = AF_INET;
serv.sin_port = htons(7777);
serv.sin_addr.s_addr = htonl(INADDR_ANY);
int ret = bind(listenfd, (struct sockaddr *)&serv, sizeof(serv));
if (ret < 0)
{
printf("bind error\n");
exit(-1);
}
listen(listenfd, 32767);
/* 创建线程池 */
ThreadPool<Echo> Tpool;
const int MAX_EVENT_NUM = 1000;
/* 想内核注册监听套接字的EPOLLIN事件 */
int epollfd = epoll_create(5);
epoll_event event[MAX_EVENT_NUM];
epoll_event e;
e.data.fd = listenfd;
e.events = EPOLLIN;
epoll_ctl(epollfd, EPOLL_CTL_ADD, listenfd, &e);
for (;;)
{
int number = epoll_wait(epollfd, event, MAX_EVENT_NUM, -1);
if (number < 0 && errno == EINTR)
{
printf("epoll_wait error\n");
exit(-1);
}
for (int i = 0; i < number; ++i)
{
int fd = event[i].data.fd;
if (fd == listenfd && (event[i].events & EPOLLIN))
{
int connfd = accept(listenfd, NULL, NULL);
/* 当前只是连接,并没有请求 */
epoll_event e;
e.data.fd = connfd;
e.events = EPOLLIN | EPOLLET;
epoll_ctl(epollfd, EPOLL_CTL_ADD, connfd, &e);
}
else if (event[i].events & EPOLLIN)
{
/* 这里必须是new的哟,不熟悉list容器,被坑了一把 */
Echo *preq = new Echo(fd);
Tpool.Append(preq);
epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, NULL);
}
}
}
close(listenfd);
return 0;
}