CML252
2021-08-15 03:17
采纳率: 100%
浏览 59

异步回调函数和多线程

C语言异步函数回调怎么实现,跟多线程有什么区别,请教各位大神,有个源码指导,多谢

  • 收藏

2条回答 默认 最新

  • aaaa0ggMC 2021-08-15 09:50
    已采纳
    
    #include <pthread.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <windows.h>//Windows系统专用
    
    typedef void * (*PFUNC)(void *);
    
    PFUNC func;
    
    void * SyncACallBack(void * p){
      printf("异步多线程!!!\n");
      Sleep(100);//这个线程累了!!
      return NULL;
    }
    
    void RegistCallBack(PFUNC pfun){
        func = pfun;
    }
    
    void CheckCallBack(int i){
        if(i > 75){
            pthread_t ufunc;
            pthread_create(&ufunc,NULL,func,NULL);//异步调用
        }
    }
    
    int main(void){
        srand(time(0));
        RegistCallBack(SyncACallBack);
        while(1){
            CheckCallBack(rand()%100);
            printf("主线程运行中!!\n");
        }
        return 0;
    }
    
    

    输出:
    主线程运行中!!
    异步多线程!!!
    主线程运行中!!
    异步多线程!!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    主线程运行中!!
    异步多线程!!!
    主线程运行中!!
    主线程运行中!!

    本质上与多线程没什么区别,但是还有多进程异步回调通信,这个就比较复杂了,我也不了解。应该是windows函数CreateFile创建Port端口通讯,或者winsocket套接字传输数据吧

    已采纳该答案
    打赏 评论
  • aaaa0ggMC 2021-08-15 09:47

    我也不确定我说的对不对哈,肯定有错误,如果您发现了,可以指正一下,毕竟我不常用异步调用,windows事件处理函数是普通的同步回调函数

    打赏 评论

相关推荐 更多相似问题