это код блокировки, как бы я преобразовал его в асинхронную блокировку?
Я пытаюсь сделать асинхронную связь между клиентом и сервером.
Вот мой код блокировки синхронизации, как бы я сделал это асинхронно?
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;
}
Переместите цикл 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
}
Других решений пока нет …