Среда:
- C ++
- Ubuntu x64
- Асинхронный ввод-вывод
Фрагмент кода:
spThreadPool->WaitForIO(EPOLLIN, fd,
[spThreadPool, this, pBuf, uiTotalBytes, completion](int fd){
int iBytes = read(fd, pBuf, uiTotalBytes)
uiTotalByes -= iBytes;
pBuf += iBytes;
if(0 == uiTotalByes)
completion(SUCCESS)
else
spThreadPool->WaitForIO(EPOLLIN, fd, std::this_lambda())
})
Поток действий:
- spThreadPool выполняет асинхронное завершение ввода-вывода в произвольном потоке
- При наличии дополнительных байтов (EPOLLIN) лямбда называется
- Лямбда обратный вызов может вернуться с частичным чтением (то есть iBytes
- Пока запрошенные байты не были полностью прочитаны, другое чтение req с той же лямбдой должно называться
- ПРИМЕЧАНИЕ. : Поскольку это асинхронная c операция, контекст не сохраняется, а переменные стека очищаются
Постановка задачи
Есть ли способ ссылки на существующую лямбду функтор с новой операцией WaitForIO? например. используя воображаемый вызов std :: this_lambda ()?