| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4163 人关注过本帖
标题:关于C语言同步调用,回调,异步调用
取消只看楼主 加入收藏
lv740542742
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2015-9-9
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
关于C语言同步调用,回调,异步调用
最近在看C语言异步调用方面的知识

同步调用也称之为堵塞式调用,就是调用方必须等被调用方执行完毕并返回值后才接着执行,这个比较好理解。
回调 很多资料上说 回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;我的理解是通过把一个函数的地址作为形参给调用函数,简单说就是用一个函数去调用另外一个函数。都说回调是非堵塞式调用,但我觉得这也是同步调用,调用函数也是必须等被调用函数执行完才能接着执行。
//Test.c  
#include <stdlib.h>  
#include <stdio.h>  
int Test1()  
{  
    int i;  
    for (i=0; i<30; i++)  
    {  
        printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));  
         
    }  
    return 0;  
}  
int Test2(int num)  
{  
    int i;  
    for (i=0; i<num; i++)  
    {  
        printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));  
         
    }  
    return 0;  
}  
void Caller1(void (*ptr)())//指向函数的指针作函数参数  
{  
    (*ptr)();  
    do other something;
}  
void Caller2(int n, int (*ptr)())//指向函数的指针作函数参数,这里第一个参数是为指向函数的指针服务的,  
{   //不能写成void Caller2(int (*ptr)(int n));这样的定义语法错误。  
    (*ptr)(n);  
    do other something;
    return;  
}  
int main()  
{  
    printf("************************\n");  
    Caller1(Test1); //相当于调用Test2();  
    printf("&&&&&&************************\n");  
    Caller2(30, Test2); //相当于调用Test2(30);  
    return 0;  
}


异步调用更困惑了,资料上说异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。我的理解是被调用方反过来去通知调用方,具体怎么实现的呢,能不能举个例子说明
搜索更多相关主题的帖子: 知识 接口 C语言 include 资料 
2015-09-09 13:44
lv740542742
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2015-9-9
收藏
得分:0 
回复 2楼 rjsp
大神,能否举一个异步调用的例子?我想明白到底怎么实现的
2015-09-09 14:31
lv740542742
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2015-9-9
收藏
得分:0 
回复 4楼 rjsp
谢谢 虽然不是很懂。。怎么用回调来实现异步调用呢?
2015-09-09 15:21
lv740542742
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2015-9-9
收藏
得分:0 
回复 9楼 小王KING
感谢以上各位大神的回帖,以下是网上某位大神写的:
多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。多线程是实现异步的一个重要手段,但不是唯一手段,对以一个单线程程序也可以是异步执行的。
异步操作的优缺点
  因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少 共享变量的数量),减少了死锁的可能。当然异步操作也并非完美无暇。编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与普通人的思维方式有些初入,而且难以调试。
多线程的优缺点
  多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的缺点也同样明显,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。

    我理解实现异步操作除了以上各位大神说的开启多线线程,对于单一线程可以通过回调的方式。如同这位大神所说异步回调与普通人的思维方式有些初入,不容易理解,各位大神是怎么理解这个异步回调?
2015-09-10 09:23
lv740542742
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2015-9-9
收藏
得分:0 
回复 13楼 小王KING
但是这种方式依然是堵塞式调用吧
2015-09-10 14:02
快速回复:关于C语言同步调用,回调,异步调用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025332 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved