Sample code for 30+ languages & platforms
Unicode 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 Unicode C Downloads

Unicode C
#include <C_CkSocketW.h>
#include <C_CkTaskW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkSocketW sock;
    HCkTaskW task;
    int count;
    const wchar_t *s;
    HCkSocketW connection;
    HCkSocketW acceptedConnection;

    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..

    sock = CkSocketW_Create();

    //  --------------------------------------------------------------
    //  Synchronous call returning TRUE/FALSE
    success = CkSocketW_Connect(sock,L"example.com",443,TRUE,5000);

    //  --------------------------------------------------------------
    //  Asynchronous call
    task = CkSocketW_ConnectAsync(sock,L"example.com",443,TRUE,5000);
    //  ...
    CkTaskW_Run(task);
    //  ...
    //  ...
    //  Get the status (TRUE/FALSE) value returned by the synchronous method called in the background thread.
    success = CkTaskW_GetResultBool(task);

    //  --------------------------------------------------------------
    //  Synchronous call returning an integer
    count = CkSocketW_ReceiveCount(sock);

    //  --------------------------------------------------------------
    //  Asynchronous call
    task = CkSocketW_ReceiveCountAsync(sock);
    //  ...
    CkTaskW_Run(task);
    //  ...
    //  ...
    //  Get the integer value returned by the synchronous method called in the background thread.
    count = CkTaskW_GetResultInt(task);

    //  --------------------------------------------------------------
    //  Synchronous call returning an string
    s = CkSocketW_receiveString(sock);

    //  --------------------------------------------------------------
    //  Asynchronous call
    task = CkSocketW_ReceiveStringAsync(sock);
    //  ...
    CkTaskW_Run(task);
    //  ...
    //  ...
    //  Get the string value returned by the synchronous method called in the background thread.
    s = CkTaskW_getResultString(task);

    //  --------------------------------------------------------------
    //  Synchronous call returning an object
    connection = CkSocketW_AcceptNextConnection(sock,5000);

    //  --------------------------------------------------------------
    //  Asynchronous call
    task = CkSocketW_AcceptNextConnectionAsync(sock);
    //  ...
    CkTaskW_Run(task);
    //  ...
    //  ...
    //  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).
    acceptedConnection = CkSocketW_Create();
    if (CkTaskW_getTaskSuccess(task) == TRUE) {
        success = CkSocketW_LoadTaskResult(acceptedConnection,task);
    }



    CkSocketW_Dispose(sock);
    CkSocketW_Dispose(acceptedConnection);

    }