24

I need to program asynchronous ODBC driver,which need to handle user requested ODBC APIs in asynchronous way. I am desperate to know how to write an asynchronous program portable on all platforms. Can you please provide me a basic C code on how to right asynchronous code?

Thanks in advance.

2 Answers 2

8

Take below as example, notice async mostly used in multi-thread,

// FILE NAME: a.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>

typedef void (*pcb)(int a);
typedef struct parameter
{
    int a;
    pcb callback;
} parameter;

void *callback_thread(void *p1)
{
    //do something
    parameter *p = (parameter *)p1;
    while (1)
    {
        printf("GetCallBack print! \n");
        sleep(3); //delay 3s
        p->callback(p->a);
    }
}

extern int SetCallBackFun(int a, pcb callback)
{
    printf("SetCallBackFun print! \n");
    parameter *p = malloc(sizeof(parameter));
    p->a = 10;
    p->callback = callback;

    pthread_t thing1;
    pthread_create(&thing1, NULL, callback_thread, (void *)p);
    pthread_join(thing1, NULL);
}
// FILE NAME: b.c
#include "boo.c"
#include <stdio.h>

void fCallBack(int a)
{
    //do something
    printf("a = %d\n",a);
    printf("fCallBack print! \n");
}


int main(void)
{
    SetCallBackFun(4,fCallBack);

    return 0;
}

Output is below,

SetCallBackFun print!
GetCallBack print!
a = 10
fCallBack print!
GetCallBack print!
a = 10
fCallBack print!
GetCallBack print!
a = 10
fCallBack print!
GetCallBack print!
a = 10
fCallBack print!
GetCallBack print!
a = 10
fCallBack print!
GetCallBack print!

...

In terms of calling function, there are three types: sync, back, and async.

The tricky thing is the last two are highly correlated, why is that?

Perhaps a graph would make it clear, i.e.

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

Very practical example helping me understand! Many thanks!
6

tidy code for asynchronous IO is a good thread to start in.

Portable solutions don't really exist. It also differs for socket streams and files, on all platforms.

libevent is a good abstraction.

Writing ODBC is not for the faint hearted.

2 Comments

ODBC is actually pretty straightforward.
depends on the practitioner, Neil.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.