Преобразование блокирующего синхронного кода в асинхронный

это код блокировки, как бы я преобразовал его в асинхронную блокировку?
Я пытаюсь сделать асинхронную связь между клиентом и сервером.
Вот мой код блокировки синхронизации, как бы я сделал это асинхронно?

bool S3W::CImplServerData::WaitForCompletion(unsigned int timeout)
{unsigned int t1;
while (true)
{
BinaryMessageBuffer currBuff;
if (m_Queue.try_pop(currBuff))
{
ProcessBuffer(currBuff);
t1 = clock();
}
else
{
unsigned int  t2 = clock();

if ((t2 - t1) > timeout)
{
return false;
}
else
{
Sleep(1);
}
}
}

return true;
}

0

Решение

Переместите цикл while за пределы самой функции:

bool S3W::CImplServerData::WaitForCompletion()
{
BinaryMessageBuffer currBuff;
if (m_Queue.try_pop(currBuff))
{
ProcessBuffer(currBuff);
// do any processing needed here
}

// return values to tell the rest of the program what to do
}

ваш основной цикл получает цикл while

while (true)
{
bool outcome = S3W::CImplServerData::WaitForCompletion()

// outcome tells the main program whether any communications
// were received. handle any returned values here

// handle stuff you do while waiting, e.g. check for input and update
// the graphics
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]