C中异步编程的示例代码

Nag*_*mya 11 asynchronous

我需要编程异步ODBC驱动程序,它需要以异步方式处理用户请求的ODBC API.我迫切希望知道如何在所有平台上编写可移植的异步程序.你能否为我提供一个关于如何正确的异步代码的基本C代码?

提前致谢.

Lin*_*ive 9

以下面为例,注意async主要用在多线程中,

// 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);
}
Run Code Online (Sandbox Code Playgroud)
// 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;
}
Run Code Online (Sandbox Code Playgroud)

输出如下,

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!
Run Code Online (Sandbox Code Playgroud)

...

从调用函数来看,有sync、back、async三种。

棘手的是最后两个是高度相关的,为什么呢?

也许一张图可以清楚地说明这一点,即

在此输入图像描述


Wil*_*ill 5

异步 IO 的整洁代码是一个很好的起点。

便携式解决方案实际上并不存在。对于所有平台上的套接字流和文件,它也有所不同。

libevent是一个很好的抽象。

编写 ODBC 不适合胆小的人。

  • 取决于从业者尼尔。 (5认同)