本文整理汇总了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);
}