当前位置: 首页>>代码示例>>C++>>正文


C++ ThreadPool::Append方法代码示例

本文整理汇总了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;
}
开发者ID:jammgit,项目名称:ThreadPool,代码行数:74,代码来源:Echo.c


注:本文中的ThreadPool::Append方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。