Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkSocket.pb"
IncludeFile "CkTask.pb"

Procedure ChilkatExample()

    success.i = 0

    ; 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 (1/0), get returned value by calling GetResultBool.
    ; For example..

    sock.i = CkSocket::ckCreate()
    If sock.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; --------------------------------------------------------------
    ; Synchronous call returning 1/0
    success = CkSocket::ckConnect(sock,"example.com",443,1,5000)

    ; --------------------------------------------------------------
    ; Asynchronous call
    task.i = CkSocket::ckConnectAsync(sock,"example.com",443,1,5000)
    ; ...
    CkTask::ckRun(task)
    ; ...
    ; ...
    ; Get the status (1/0) value returned by the synchronous method called in the background thread.
    success = CkTask::ckGetResultBool(task)

    ; --------------------------------------------------------------
    ; Synchronous call returning an integer
    count.i = CkSocket::ckReceiveCount(sock)

    ; --------------------------------------------------------------
    ; Asynchronous call
    task = CkSocket::ckReceiveCountAsync(sock)
    ; ...
    CkTask::ckRun(task)
    ; ...
    ; ...
    ; Get the integer value returned by the synchronous method called in the background thread.
    count = CkTask::ckGetResultInt(task)

    ; --------------------------------------------------------------
    ; Synchronous call returning an string
    s.s = CkSocket::ckReceiveString(sock)

    ; --------------------------------------------------------------
    ; Asynchronous call
    task = CkSocket::ckReceiveStringAsync(sock)
    ; ...
    CkTask::ckRun(task)
    ; ...
    ; ...
    ; Get the string value returned by the synchronous method called in the background thread.
    s = CkTask::ckGetResultString(task)

    ; --------------------------------------------------------------
    ; Synchronous call returning an object
    connection.i = CkSocket::ckAcceptNextConnection(sock,5000)

    ; --------------------------------------------------------------
    ; Asynchronous call
    task = CkSocket::ckAcceptNextConnectionAsync(sock)
    ; ...
    CkTask::ckRun(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.i = CkSocket::ckCreate()
    If acceptedConnection.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    If CkTask::ckTaskSuccess(task) = 1
        success = CkSocket::ckLoadTaskResult(acceptedConnection,task)
    EndIf



    CkSocket::ckDispose(sock)
    CkSocket::ckDispose(acceptedConnection)


    ProcedureReturn
EndProcedure