Beispiel #1
0
int main()
{
    bool is_exit = false;

    // co_timer_add接受两个参数
    // 第一个参数可以是std::chrono中的时间长度,也可以是时间点。
    // 第二个参数是定时器回调函数
    // 返回一个uint64_t类型的ID, 通过这个ID可以撤销还未执行的定时函数
    uint64_t id1 = co_timer_add(std::chrono::seconds(1), [&]{
            printf("Timer Callback.\n");
            });

    // co_timer_cancel接口可以撤销还未执行的定时函数
    // 它只接受一个参数,就是co_timer_add返回的ID。
    // 它返回bool类型的结果,如果撤销成功,返回true;
    //     如果未来得及撤销而是被执行了,返回false;
    bool cancelled = co_timer_cancel(id1);
    printf("cancelled:%s\n", cancelled ? "true" : "false");

    co_timer_add(std::chrono::seconds(2), [&]{
            printf("Timer Callback.\n");
            is_exit = true;
            });

    while (!is_exit)
        g_Scheduler.Run();
    return 0;
}
int main()
{
    bool *is_exit = new bool(false);

    // co_timer_add接受两个参数
    // 第一个参数可以是std::chrono中的时间长度,也可以是时间点。
    // 第二个参数是定时器回调函数
    // 返回一个co_timer_id类型的ID, 通过这个ID可以撤销还未执行的定时函数
    co_timer_id id1 = co_timer_add(std::chrono::seconds(1), []{
            printf("Timer Callback.\n");
            });

    // co_timer_cancel接口可以撤销还未执行的定时函数
    // 它只接受一个参数,就是co_timer_add返回的ID。
    // 它返回bool类型的结果,如果撤销成功,返回true;
    //     如果未来得及撤销,返回false, 此时不保证回调函数已执行完毕。
    //     如果需要保证回调函数不再撤销失败以后被执行, 需要使用co_timer_block_cancel接口
    bool cancelled = co_timer_cancel(id1);
    printf("cancelled:%s\n", cancelled ? "true" : "false");

    co_timer_add(std::chrono::seconds(2), [=]{
            printf("Timer Callback.\n");
            *is_exit = true;
            });

    for (int i = 0; i < 100; ++i)
        go []{
            // 休眠当前协程 1000 milliseconds.
            // 不会阻塞线程, 因此100个并发的休眠, 总共只需要1秒.
            co_sleep(1000);
        };

    while (!*is_exit)
        co_sched.Run();
    return 0;
}