当回调函数向调用层产生事件时,上层应该如何响应,如何处理呢?我用的是C语言,还请高手指教!本人初学!

 我来答
精装工程师
2011-03-02 · TA获得超过236个赞
知道小有建树答主
回答量:111
采纳率:50%
帮助的人:58.4万
展开全部
这取决于你具体的应用,如果你上层的响应的逻辑比较简单,并且处理很快,就在回调函数中直接处理即可,如果需要花费较长的时间,你就需要建立数据缓冲区,先将数据填入缓冲区,然后直接返回,同时建立单独的线程来处理缓冲区的数据,这当中需要注意缓冲区的同步操作保护
例如,你的界面程序调用通信模块,在界面程序中设置了回调用来响应通信模块中接收到的数据,在处理时将收到的数据显示在界面上,对于数据量较少的情形,你直接在回调中将收到的数据抛出消息给主界面刷新即可;对于数据量很大的场合,你直接抛消息很可能会失败,而且每次收到数据都触发界面刷新会严重降低性能,那么就需要先将数据填入缓冲区,主界面以定时读取数据的方式来刷新
追问
直接在回调中将收到的数据抛出消息给主界面,,有点类似,在C中,回调函数抛一个数据到主函数中,我怎么查询到那个值并且抓住那个值呢??我想知道那个数的值,然后做具体操作,不解中..
追答
你可以把你需要的数据放到消息的参数里面,也可以放到一个你自己定义的缓冲区中,然后在消息响应函数中去获取,一般消息的两个参数WPARAM和LPARAM对C语言完全够用了,你可以把你的数据放到数据结构里面,然后把结构的指针传入即可
另需要注意postmessage和sendmessage的区别,postmessage是非阻塞调用,也就是说当调用返回时消息实际可能还未被处理,而sendmessage是阻塞调用,函数返回意味着消息处理完毕,也就是说,你通过postmessage传入的数据结构需要通过new的方式去申请内存,否则等消息处理的时候,内存可能已经被释放,从而引发异常
sgx6660888
2011-03-01 · TA获得超过237个赞
知道答主
回答量:79
采纳率:0%
帮助的人:65.4万
展开全部
产生事件 是什么意思。
如果是传递信息, 可以通过回调函数的返回值,来向调用层的函数来传递消息。
如果一定是要用时间, 那就发消息即可。
消息机制根据操作系统的不同,提供的函数也不同, 特别是嵌入式系统。
如果是简单的消息, 也可以通过全局变量等方式来简单实现, 不过在多线程系统中,很危险。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8768c28
2011-03-01 · 超过10用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:34.9万
展开全部
回调函数是一个函数指针;调用它,程序直接进入回调函数的实现部分;
“当回调函数向调用层产生事件时,上层应该如何响应”理解什么意思?
void funA(){printf("funA");}
typedef void (*fun)();//定义fun 函数指针类型,类似int等类型
void funB(fun pfun)//函数指针pfun作为参数
{
(*pfun)();//回调函数调用funA();结果输出:funA
}
可以到百度首页搜下“回调函数”
http://baike.baidu.com/view/414773.htm
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户59079
2011-03-05 · TA获得超过339个赞
知道答主
回答量:247
采纳率:0%
帮助的人:342万
展开全部
void fun(float* a,float* b,float *sum,float *sub)
{
*sum=*a+*b;
*sub=*a-*b;
}

int main()
{
float a=12.01,b=22.22;
float sum,sub;
fun(&a,&b,&sum,&sub);
printf("sum=%f sub=%f",sum,sub);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1aea09a5d
2011-03-01 · TA获得超过357个赞
知道小有建树答主
回答量:1122
采纳率:0%
帮助的人:186万
展开全部
这个好像不行吧,在c中用多线程是个办法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式