Sample code for asynchronous programming in C

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

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

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

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like