本文整理汇总了C++中WorkItem::onCompletion方法的典型用法代码示例。如果您正苦于以下问题:C++ WorkItem::onCompletion方法的具体用法?C++ WorkItem::onCompletion怎么用?C++ WorkItem::onCompletion使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorkItem
的用法示例。
在下文中一共展示了WorkItem::onCompletion方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetWorkQueueHandle
//.........这里部分代码省略.........
} else {
break;
}
}
if (len == -1) { errCode = errno; }
}
complData = work->workData.ioData.buf;
fd = work->workData.ioData.fd;
} else if ( work->workKind & WORKER_WRITE ) {
if ( work->workKind & WORKER_FOR_SOCKET ) {
len = send(work->workData.ioData.fd,
work->workData.ioData.buf,
work->workData.ioData.len,
0);
if (len == SOCKET_ERROR) {
errCode = WSAGetLastError();
}
} else {
len = write(work->workData.ioData.fd,
work->workData.ioData.buf,
work->workData.ioData.len);
if (len == -1) {
errCode = errno;
// write() gets errno wrong for
// ERROR_NO_DATA, we have to fix it here:
if (errCode == EINVAL &&
GetLastError() == ERROR_NO_DATA) {
errCode = EPIPE;
}
}
}
complData = work->workData.ioData.buf;
fd = work->workData.ioData.fd;
} else if ( work->workKind & WORKER_DELAY ) {
/* Approximate implementation of threadDelay;
*
* Note: Sleep() is in milliseconds, not micros.
*
* MSDN says of Sleep:
* If dwMilliseconds is greater than one tick
* but less than two, the wait can be anywhere
* between one and two ticks, and so on.
*
* so we need to add (milliseconds-per-tick - 1)
* to the amount of time we sleep for.
*
* test ThreadDelay001 fails if we get this wrong.
*/
Sleep(((work->workData.delayData.usecs + 999) / 1000)
+ iom->sleepResolution - 1);
len = work->workData.delayData.usecs;
complData = NULL;
fd = 0;
errCode = 0;
} else if ( work->workKind & WORKER_DO_PROC ) {
// perform operation/proc on behalf of Haskell thread.
if (work->workData.procData.proc) {
// The procedure is assumed to encode result +
// success/failure via its param.
void* param = work->workData.procData.param;
errCode=work->workData.procData.proc(param);
} else {
errCode=1;
}
complData = work->workData.procData.param;
} else {
fprintf(stderr, "unknown work request type (%d), "
"ignoring.\n", work->workKind);
fflush(stderr);
continue;
}
if (!work->abandonOp) {
work->onCompletion(work->requestID,
fd,
len,
complData,
errCode);
}
// Free the WorkItem
DeregisterWorkItem(iom,work);
free(work);
} else {
fprintf(stderr, "unable to fetch work; fatal.\n");
fflush(stderr);
EnterCriticalSection(&iom->manLock);
ioMan->numWorkers--;
LeaveCriticalSection(&iom->manLock);
return 1;
}
} else {
fprintf(stderr, "waiting failed (%lu); fatal.\n", rc);
fflush(stderr);
EnterCriticalSection(&iom->manLock);
ioMan->numWorkers--;
LeaveCriticalSection(&iom->manLock);
return 1;
}
}
return 0;
}