• 事件驱动和表驱动(C语言版)


    事件驱动和表驱动是两种不同的编程方法,它们在C语言中有不同的应用。

    事件驱动

    事件驱动是一种编程模型,其中程序的执行流程由外部事件(如用户输入、硬件设备状态变化等)决定。在事件驱动模型中,程序会不断地检查是否有新的事件发生,并根据事件的类型执行相应的操作。这种模型通常用于实现实时系统,如操作系统、游戏引擎等。

    表驱动

    表驱动是一种编程方法,它使用一张表格来存储不同条件下的操作。在表驱动模型中,程序会根据输入的条件查找对应的操作,并执行该操作。这种方法通常用于实现简单的逻辑判断和决策树。

    事件驱动举例

    #include

    // 事件处理函数

    void handle_event(int event) {

    switch (event) {

    case 1:

    printf("Event 1 occurred.

    ");

    break;

    case 2:

    printf("Event 2 occurred.

    ");

    break;

    default:

    printf("Unknown event occurred.

    ");

    }

    }

     

    int main() {

    int event;

     

    // 模拟事件循环

    while (1) {

    printf("Enter an event (1 or 2, or -1 to exit): ");

    scanf("%d", &event);

     

    if (event == -1) {

    break;

    }

     

    handle_event(event);

    }

     

    return 0;

    }

    表驱动举例

    #include

    // 操作表

    typedef struct {

    int input;

    void (*action)(int);

    } ActionTableEntry;

     

    // 操作函数

    void action1(int input) {

    printf("Action for input %d: Do something with input 1.

    ", input);

    }

     

    void action2(int input) {

    printf("Action for input %d: Do something with input 2.

    ", input);

    }

     

    // 查找操作函数

    void *find_action(int input) {

    ActionTableEntry actions[] = {

    {1, action1},

    {2, action2},

    {-1, NULL}

    };

     

    for (int i = 0; actions[i].input != -1; i++) {

    if (actions[i].input == input) {

    return actions[i].action;

    }

    }

     

    return NULL;

    }

     

    int main() {

    int input;

    void (*action)(int);

     

    // 模拟事件循环

    while (1) {

    printf("Enter an input (1 or 2, or -1 to exit): ");

    scanf("%d", &input);

     

    if (input == -1) {

    break;

    }

     

    action = find_action(input);

    if (action) {

    action(input);

    } else {

    printf("Unknown input.

    ");

    }

    }

     

    return 0;

    }

    bf8a43bb5d4642ee889e162d945137a3~tplv-obj.jpg?lk3s=3de049d8&traceid=2023111522514137DF4F78560EF6355FB0&x-expires=2147483647&x-signature=87iYpDQCM3LrTrvKYL5rCAPcDaU%3D

     

  • 相关阅读:
    单例设计模式的三种实现与比较
    探究Presto SQL引擎(4)-统计计数
    【2022CSPJ普及组】T1.第一题乘方pow
    Unity SteamVR 开发教程:SteamVR Input 输入系统(2.x 以上版本)
    如何衡量算法的优劣??
    成员内部类、局部内部类、匿名内部类
    【.NET全栈】ASP.NET开发Web应用——站点导航技术
    代码随想录算法训练营day55 | 392.判断子序列,115.不同的子序列
    Linux内核调试工具——devmem
    kafka集群穿透到公网实现过程
  • 原文地址:https://blog.csdn.net/qq_20490175/article/details/134431399