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


C++ Timeout::getRemain方法代码示例

本文整理汇总了C++中Timeout::getRemain方法的典型用法代码示例。如果您正苦于以下问题:C++ Timeout::getRemain方法的具体用法?C++ Timeout::getRemain怎么用?C++ Timeout::getRemain使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Timeout的用法示例。


在下文中一共展示了Timeout::getRemain方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: wait

PollSelect::WaitStatus PollSelect::wait(const Timeout& tm, Result& result) {

	do {
		Timeout finTm = tm;
		if (!timeoutHeap.empty()) {
			Timeout p = timeoutHeap.top().owner->timeout;
			SysTime now = SysTime::now();
			while (p.expired(now)) {
				FdInfo *owner = timeoutHeap.top().owner;
				removeOldTm(owner);
				if (owner->waitFor != 0) {
					result.fd = getFd(owner);
					result.flags = 0;
					result.userData = owner->userData;
					owner->waitFor = 0;
					removeFromPool(owner->poolpos);
					return waitEvent;
				}
				if (timeoutHeap.empty()) break;
				p = timeoutHeap.top().owner->timeout;
			}
			if (p < finTm) finTm = p;
		}

		natural timeout_msecs = finTm.getRemain().msecs();
		int res = poll(curpool.data(),curpool.length(),timeout_msecs);
		if (res == -1) {
			if (errno != EINTR) throw ErrNoException(THISLOCATION,errno);
		}
		else if (res == 0) {
			if (tm.expired()) {
				return waitTimeout;
			} else {
				FdInfo *finfo = timeoutHeap.top().owner;
				removeOldTm(finfo);
				result.fd = getFd(finfo);
				result.flags = 0;
				result.userData = finfo->userData;
				finfo->waitFor = 0;
				removeFromPool(finfo->poolpos);
				return waitEvent;
			}
		} else {
			for (natural i = 0; i < curpool.length(); i++) {
				if (curpool[i].revents) {
					int fd = curpool[i].fd;
					int revents = curpool[i].revents;

					if (fd == wakeOut) {
						byte b;
						int r = read(wakeOut,&b,1);
						if (r == -1)
							throw ErrNoException(THISLOCATION, errno);
						result.fd = 0;
						result.userData = 0;
						result.reason = reason;
						return waitWakeUp;
					} else  {
						FdInfo *finfo = socketMap.data()+fd;
						removeOldTm(finfo);
						removeFromPool(i);
						if (finfo->waitFor) {
							result.fd = fd;
							result.flags = (((revents & POLL_IN)!=0)?INetworkResource::waitForInput:0) |
									(((revents & POLL_OUT)!=0)?INetworkResource::waitForOutput:0) |
									(((revents & (POLL_PRI|POLL_ERR))!=0)?INetworkResource::waitForException:0);
							result.userData = finfo->userData;
							finfo->waitFor = 0;
							return waitEvent;
						}
					}
				}
			}
		}
	} while (true);



}
开发者ID:ondra-novak,项目名称:lightspeed,代码行数:79,代码来源:pollSelect.cpp


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