Hi,

Sorry for the delay.

> Yes, please provide a short example with std::promise, which, afaiu, works 
> for your use-case.
Below is a simplified example where a client calls an API function that blocks 
until the result is actually available.
The request is sent to a queue, where a "server" thread sends a network packet 
to another host.
As soon as the reply arrives from the network, another "server" thread uses the 
promise for delivering the result to the client.


Thread 1 (called by client)
--------
std::promise<int> prom;
// put promise into map for later retrieval by server thread
promiseMap.insert(id, prom);
// trigger work
queue.enqueueWork(id, workItem);
// get future and block until result becomes available
std::future fut = prom.get_future();
return fut.get();


Thread 2 ("server" request thread)
--------
workItem = queue.dequeueWork();
// do some work, then send the request
sendRequest(workItem.id, workItem.content);


Thread 3 ("server" reply thread)
--------
reply = receiveReply();
// retrieve promise for the original request
std::promise<int> prom = promiseMap.get(reply.id);
// deliver result to original requestor
prom.set_value(reply.value);



HTH
 Christian
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to