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 <C_CkSocket.h>
#include <C_CkTask.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkSocket sock;
    HCkTask task;
    int count;
    const char *s;
    HCkSocket connection;
    HCkSocket 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 = CkSocket_Create();

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

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

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

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

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

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

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

    // --------------------------------------------------------------
    // Asynchronous call
    task = CkSocket_AcceptNextConnectionAsync(sock);
    // ...
    CkTask_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 = CkSocket_Create();
    if (CkTask_getTaskSuccess(task) == TRUE) {
        success = CkSocket_LoadTaskResult(acceptedConnection,task);
    }



    CkSocket_Dispose(sock);
    CkSocket_Dispose(acceptedConnection);

    }