Sample code for 30+ languages & platforms
C++

Understanding Async Function Return Values

See more Async Examples

Explains how to get the return value of the function called synchonously in the background thread.

Chilkat C++ Downloads

C++
#include <CkSocket.h>
#include <CkTask.h>

void ChilkatSample(void)
    {
    bool success = false;

    //  Some Chilkat functions can be called asynchronously.
    //  If a function "Func" can be called asynchronously, there will be a corresponding "FuncAsync" function that returns a Task object.
    //  
    //  When Task.Run is called, the synchronous "Func" runs in a background thread.
    //  

    //  For Chilkat methods that return a status (true/false), get returned value by calling GetResultBool.
    //  For example..

    CkSocket sock;

    //  --------------------------------------------------------------
    //  Synchronous call returning true/false
    success = sock.Connect("example.com",443,true,5000);

    //  --------------------------------------------------------------
    //  Asynchronous call
    CkTask *task = sock.ConnectAsync("example.com",443,true,5000);
    //  ...
    task->Run();
    //  ...
    //  ...
    //  Get the status (true/false) value returned by the synchronous method called in the background thread.
    success = task->GetResultBool();

    //  --------------------------------------------------------------
    //  Synchronous call returning an integer
    int count = sock.ReceiveCount();

    //  --------------------------------------------------------------
    //  Asynchronous call
    task = sock.ReceiveCountAsync();
    //  ...
    task->Run();
    //  ...
    //  ...
    //  Get the integer value returned by the synchronous method called in the background thread.
    count = task->GetResultInt();

    //  --------------------------------------------------------------
    //  Synchronous call returning an string
    const char *s = sock.receiveString();

    //  --------------------------------------------------------------
    //  Asynchronous call
    task = sock.ReceiveStringAsync();
    //  ...
    task->Run();
    //  ...
    //  ...
    //  Get the string value returned by the synchronous method called in the background thread.
    s = task->getResultString();

    //  --------------------------------------------------------------
    //  Synchronous call returning an object
    CkSocket *connection = sock.AcceptNextConnection(5000);

    //  --------------------------------------------------------------
    //  Asynchronous call
    task = sock.AcceptNextConnectionAsync();
    //  ...
    task->Run();
    //  ...
    //  ...
    //  Get the object returned by the synchronous method called in the background thread.
    //  We do this a little differently.  We create an new object of the same type,
    //  and then load it with the returned object (assuming it was not null).
    CkSocket acceptedConnection;
    if (task->get_TaskSuccess() == true) {
        success = acceptedConnection.LoadTaskResult(*task);
    }
    }