① callback是什么意思
回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过参数将函数传递到其它代码的,某一块可执行代码的引用。
这一设计允许了底层代码调用在高层定义的子程序。
回调的用途十分广泛。例如,假设有一个函数,其功能为读取配置文件并由文件内容设置对应的选项。
若这些选项由散列值所标记,则让这个函数接受一个回调会使得程序设计更加灵活:函数的调用者可以使用所希望的散列算法,该算法由一个将选项名转变为散列值的回调函数实现;因此,回调允许函数调用者在运行时调整原始函数的行为。
回调的另一种用途在于处理信号或者类似物。例如一个POSIX程序可能在收到SIGTERM信号时不愿立即终止;为了保证一切运行良好,该程序可以将清理函数注册为SIGTERM信号对应的回调。
回调亦可以用于控制一个函数是否作为:Xlib允许自定义的谓词用于决定程序是否希望处理特定的事件。
有两种类型的回调,它们在运行时控制数据流的方式不同:阻塞回调(也称为同步回调或仅回调)和延迟回调(也称为异步回调)。
在函数返回之前调用阻塞回调(在下面的 C 示例中,它说明了阻塞回调,它是函数main),则可以在函数返回后调用延迟回调。延迟回调通常用于 I/O 操作或事件处理的上下文中,并且在多个线程的情况下由中断或不同的线程调用。
由于其性质,阻塞回调可以在没有中断或多线程的情况下工作,这意味着阻塞回调通常不用于同步或将工作委托给另一个线程。
回调用于在窗口系统中对应用程序进行编程。在这种情况下,应用程序提供(引用)一个特定的自定义回调函数供操作系统调用,然后操作系统调用此特定于应用程序的函数以响应鼠标单击或按键等事件。
这里的一个主要问题是权限和安全性的管理:虽然该函数是从操作系统调用的,但它不应以与系统相同的权限运行。这个问题的解决方案是使用保护环。
回调函数在实际中有许多作用。
假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序、shell排序、shake排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑。
回调可用于通知机制。例如,有时要在A程序中设置一个计时器,每到一定时间,A程序会得到相应的通知,但通知机制的实现者对A程序一无所知。
那么,就需一个具有特定原型的函数指针进行回调,通知A程序事件已经发生。实际上,API使用一个回调函数SetTimer来通知A程序。如果没有提供回调函数,它还会把一个消息发往程序的消息队列。
另一个使用回调机制的API函数是EnumWindow,它枚举屏幕上所有的顶层窗口,每个窗口都可以通过它调用另一个程序提供的函数,并传递窗口的处理程序。例如:如果被调用者返回一个值,就继续进行迭代;否则,退出。
EnumWindow并不关心被调用者在何处,也不关心被调用者用它传递的处理程序做了什么,它只关心返回值,因为基于返回值,它将继续执行或退出。
C语言的回调函数只能通过函数指针实现,在C++中则可以使用匿名函数(lambda)或仿函数(functor)作为回调函数。
② 为什么编程那么难
编程需要人有比较强的逻辑思维能力,编程过程中很多东西都很抽象,这就需要你多花时间去理解了.
C语言基本编程还是很容易的,就是掌握几个控制语句,控制你的程序每一步该干什么,实现比较容易,程序大了就要考虑程序内部的数据组织问题,即数据结构.
数据结构可以说是编程的核心,很多算法都需要有好的数据结构,同时学数据结构具有很大的难度,好多软件从业人员在这方面也是比较欠缺的,想学好需要花时间去多想这个结构是怎么链接的,同时也要多在电脑上练习.一时学的不如意也不要灰心.
汇编语言就是那些指令不大好记,其实你用多了也就熟悉了.
慢慢来吧!
③ centos系统怎么安装qt4.8.4
记录下在CentOS下安装qt4.8的过程:
(最好是在英文系统语言环境下安装,中文可能会出现无法正确中文字体)
1. 安装必需的环境
安装gcc和g++:
[root@localhost local]# yum install gcc
[root@localhost local]# yum install gcc-c++
安装Xlib:[root@localhost local]# yum install libX11-devel libXext-devel libXtst-devel
2. 下载qt
官网下载地址:http://qt-project.org/downloads。
CentOS安装选择
Qt libraries 4.8.5 for linux/X11 (230 MB) (Info) 3. 将下载的qt进行解压
[root@localhost local]# tar zxvf qt-everywhere-opensource-src-4.8.5.tar.gz
4. 进行配置
[root@localhost local]# ./configure --prefix=/usr/local
我选择安装在/usr/local下,最后配置环境的时候要记得更换成自己安装的目录。
5. 编译、运行
这步可能会花费比较长的时间,需要耐心等大
[root@localhost local]# gmake
[root@localhost local]# gmake install
6. 安装成功,配置环境变量
将安装路径写到环境变量中
[root@localhost local]# vim /etc/profile
加入以下内容:
#ADD QT4.8.5 PATH
PATH=/usr/local/bin:$PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTTRC
使配置生效
[root@localhost bin]# source /etc/profile
7. 配置成功!打开qt界面进行编程吧!
进入qt安装目录/bin文件夹下,执行
④ 谁有xlib编程开发的中文电子文档
//XButton.c
#include
#include
main()
{
Display *d;
Window w, wb;
XEvent event;
Font f;
GC gc;
d = XOpenDisplay( NULL );
w = XCreateSimpleWindow( d, RootWindow( d, 0 ),
180, 50,
260, 160,
1, WhitePixel(d, 0), BlackPixel(d, 0) );
XSelectInput( d, w, ExposureMask|ButtonPressMask );
wb = XCreateSimpleWindow( d, w,
20, 20,
100, 20,
1, WhitePixel(d, 0), BlackPixel(d, 0) );
XSelectInput( d, wb, ExposureMask|ButtonPressMask );
gc = XCreateGC( d, w, 0, 0 );
f = XLoadFont( d, "fixed" );
XSetFont( d, gc, f );
XMapWindow( d, w );
XMapWindow( d, wb );
XFlush( d );
while( 1 ){
XNextEvent( d, &event );
switch( event.type ){
case Expose:
if ( event.xany.window == wb ){
XSetForeground( d, gc, BlackPixel(d, 0) );
XFillRectangle( d, w, gc, 0, 0, 260, 160 );
XSetForeground( d, gc, WhitePixel(d, 0) );
XDrawString( d, wb, gc, 10, 10, "push", 4 );//把push换成中文例如”确 //定”?????为什么编译完后,执行,不能出现中文
}
break;
case ButtonPress:
if ( event.xany.window == w ){
printf( "w " );
fflush( stdout );
}
if ( event.xany.window == wb ){
printf( "wb ");
fflush( stdout );
}
break;
}
}
}
⑤ linux 下怎么画图
你要在你编写程序中实现画图功能的话,在linux下一般是基于xlib和opengl的,窗口化部分则是交给qt或gtk
嫌麻烦的话,可以用glut,这个是基于opengl的功能包,功能较简单,适合拿来玩熟原理
⑥ Qt是什么学习嵌入式会学到这个吗
QT是应用开发,如果要搞嵌入式上层开发,本身跟java,ios没什么区别,注重特效,注重应用界面,不建议搞,