
当回调函数向调用层产生事件时,上层应该如何响应,如何处理呢?我用的是C语言,还请高手指教!本人初学!
5个回答
展开全部
这取决于你具体的应用,如果你上层的响应的逻辑比较简单,并且处理很快,就在回调函数中直接处理即可,如果需要花费较长的时间,你就需要建立数据缓冲区,先将数据填入缓冲区,然后直接返回,同时建立单独的线程来处理缓冲区的数据,这当中需要注意缓冲区的同步操作保护
例如,你的界面程序调用通信模块,在界面程序中设置了回调用来响应通信模块中接收到的数据,在处理时将收到的数据显示在界面上,对于数据量较少的情形,你直接在回调中将收到的数据抛出消息给主界面刷新即可;对于数据量很大的场合,你直接抛消息很可能会失败,而且每次收到数据都触发界面刷新会严重降低性能,那么就需要先将数据填入缓冲区,主界面以定时读取数据的方式来刷新
例如,你的界面程序调用通信模块,在界面程序中设置了回调用来响应通信模块中接收到的数据,在处理时将收到的数据显示在界面上,对于数据量较少的情形,你直接在回调中将收到的数据抛出消息给主界面刷新即可;对于数据量很大的场合,你直接抛消息很可能会失败,而且每次收到数据都触发界面刷新会严重降低性能,那么就需要先将数据填入缓冲区,主界面以定时读取数据的方式来刷新
追问
直接在回调中将收到的数据抛出消息给主界面,,有点类似,在C中,回调函数抛一个数据到主函数中,我怎么查询到那个值并且抓住那个值呢??我想知道那个数的值,然后做具体操作,不解中..
追答
你可以把你需要的数据放到消息的参数里面,也可以放到一个你自己定义的缓冲区中,然后在消息响应函数中去获取,一般消息的两个参数WPARAM和LPARAM对C语言完全够用了,你可以把你的数据放到数据结构里面,然后把结构的指针传入即可
另需要注意postmessage和sendmessage的区别,postmessage是非阻塞调用,也就是说当调用返回时消息实际可能还未被处理,而sendmessage是阻塞调用,函数返回意味着消息处理完毕,也就是说,你通过postmessage传入的数据结构需要通过new的方式去申请内存,否则等消息处理的时候,内存可能已经被释放,从而引发异常
展开全部
产生事件 是什么意思。
如果是传递信息, 可以通过回调函数的返回值,来向调用层的函数来传递消息。
如果一定是要用时间, 那就发消息即可。
消息机制根据操作系统的不同,提供的函数也不同, 特别是嵌入式系统。
如果是简单的消息, 也可以通过全局变量等方式来简单实现, 不过在多线程系统中,很危险。
如果是传递信息, 可以通过回调函数的返回值,来向调用层的函数来传递消息。
如果一定是要用时间, 那就发消息即可。
消息机制根据操作系统的不同,提供的函数也不同, 特别是嵌入式系统。
如果是简单的消息, 也可以通过全局变量等方式来简单实现, 不过在多线程系统中,很危险。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回调函数是一个函数指针;调用它,程序直接进入回调函数的实现部分;
“当回调函数向调用层产生事件时,上层应该如何响应”理解什么意思?
void funA(){printf("funA");}
typedef void (*fun)();//定义fun 函数指针类型,类似int等类型
void funB(fun pfun)//函数指针pfun作为参数
{
(*pfun)();//回调函数调用funA();结果输出:funA
}
可以到百度首页搜下“回调函数”
http://baike.baidu.com/view/414773.htm
“当回调函数向调用层产生事件时,上层应该如何响应”理解什么意思?
void funA(){printf("funA");}
typedef void (*fun)();//定义fun 函数指针类型,类似int等类型
void funB(fun pfun)//函数指针pfun作为参数
{
(*pfun)();//回调函数调用funA();结果输出:funA
}
可以到百度首页搜下“回调函数”
http://baike.baidu.com/view/414773.htm
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
{
*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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个好像不行吧,在c中用多线程是个办法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询