導航:首頁 > 編程語言 > xlib編程例子

xlib編程例子

發布時間:2023-08-21 13:28:38

❶ 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)作為回調函數。

java GUI用戶界面編程的基礎

Java的GUI編程(Graphic User Interface 圖形用戶介面) 是在它的抽象窗口工具箱(Abstract Window Toolkit AWT)上實現的 java awt是AWT的工具類庫 其中包括了豐富的圖形 用戶界面元件和布局管理器的支持

GUI主要用在兩個地方

◆Application

◆Applet

)GUI界面

在Java GUI中 用戶與程序之間交互的一個控制面板 其內包含有菜單 控制項(或組件) 容器並旁隱能響應用戶的事件

現在有各種各樣的窗口系統 不同的窗口系統提供給程序設計的程序庫是大不攔旁一樣的 例如 基於Windows的SDK 和基於Unix平台的X Windows的Xlib

為了使程序能在不同的窗口系統下運行 Java提出了 抽象窗口系統 的概念 提供了AWT(抽象窗口工具箱) 使得Java能夠在不同的窗口系統下運行

)Java中的GUI實現方式

採用AWT(抽象窗口工具集)從而可使Java GUI適用於不同OS的環境 打造多系統的用戶界面

特點如下

① 其具體實現由目標平台下的OS來解釋 從而導致Java GUI在不同平台下會出現不同的運行效果(窗口外觀 字體等的顯示效果會發生變化)

② 組件在設計時不應採用絕對定位 而應採用布局管理器來實現相對定位 以簡啟橡達到與平台及設備無關

)新增的Java Swing GUI組件

lishixin/Article/program/Java/hx/201311/26362

linux 下怎麼畫圖

你要在你編寫程序中實現畫圖功能的話,在linux下一般是基於xlib和opengl的,窗口化部分則是交給qt或gtk

嫌麻煩的話,可以用glut,這個是基於opengl的功能包,功能較簡單,適合拿來玩熟原理

❹ 誰有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源碼包安裝過程

1. 解壓縮

可以通過下載或其他方式獲得了一個軟體包,通常它是一個壓縮文件,大部分可能是存檔的和壓縮的,這些文件一般以 .tar .gz為擴展名。

首先拷貝它到一個目錄,然後 untar 和 gunzip 解壓它。 通常這個命令

tar xzvf filename [filename 是軟體文件名稱]

解壓後的文件一般會在當前目錄下的創建子目錄,並以這個包名來命名。 你也可以用用這個命令預先查看結果 tar tzvf filename,顯示包里有那些解壓文件。

源文件如果是新的 bzip2 (.bz2) 格式,可用

bzip2 -cd filename | tar xvf -,或更簡單的 tar xyvf filename ,這很不錯的tar命令被不斷的完善。

說明:

A:有時候一些文件必須安裝在用戶的 home 目錄下,或更多的是在一個固定的目錄,比如 /, /usr/src, 或 /opt 。所以必須仔細閱讀安裝包的配置信息。當一個軟體包里如果有config 和 Makefiles 文件則最好去編輯它,這里包括了安裝指令和說明。提示:你改變 makefile 會導致不同的結果。大部分軟體包允許用 make install 自動處理安置二進制文件在適當的系統位置。

B:你可能碰到過一些共享文件、shell 存檔文件、尤其是 Internet 上的源碼新聞組。它們保留的原因是具有人性化的可讀性,並且允許新聞組緩沖並通過它們篩選和剔除出不合格的。它們可能用 unshar filename.shar 命令來解壓。

C: 一些源碼存檔文件是用非標準的 DOS,Mac 或其他壓縮的比如:

zip, arc, lha, arj, zoo, rar, and shk.

D: 有時候,你可能需要使用一個 patch 或顯示改變了的 diff 文件來升級或修復存檔的源碼文件。這 doc 文件或者 README 文件將告訴你怎麼去使用。一個很好的命令用標准語法來調用的命令是 patch < patchfile.

2: 關於 rpm 安裝包

一些 Linux 用戶懼怕通過使用源碼來手動安裝軟體包,不過現在有方便的 rpm 和 deb 或 新格式的 slp 包。例如:rpm 安裝運行平穩又快,作為一個軟體安裝在某幾個有名的操作系統。

作為方便的RPM包也存在很多不好的缺點,例如:

A: 要了解軟體中更多更詳細的內容你必須去在二進制中去了解,而不是rpm包。

B: 還有安裝一個 rpm 包如果需要依賴關系那麼安裝就可能會導致失敗。

C: 當 rpm 請求你系統中不同版本的庫,那麼安裝將不能繼續,除非你為錯誤的庫位置創建連接符號到正確的位置。

說明:必須使用root 安裝 rpm 和 deb 。因為它需要必須的寫入許可權。

最簡單的,用命令 rpm -i packagename.rpm 和 dpkg --install packagename.deb 會自動解包和安裝。

3:關於安裝 Linux 包出現的一些問題及解決方案

假設 make 失敗有個鏈接錯誤: -lX11: No such file or directory,正好在 xmkmf 之後已被調用,這可能意味著 Imake 不能被完全建立。檢查第一部分 Makefile 文件的的行是這樣:

· LIB= -L/usr/X11/lib
· INCLUDE= -I/usr/X11/include/X11
· LIBS= -lX11 -lc -lm

這個 -L 和 -I 開關告訴編譯器和鏈接分別在哪裡找到 library 和 include 文件。在這個例子里, X11 庫應該在 /usr/X11/lib 目錄,且 X11 包含文件應該在 /usr/X11/include/X11 目錄里。假如對於你的機器上的這個錯誤,請處理修改 Makefile 並重新再 make。

沒有聲明涉及的數學庫函數,像下列各項:
/tmp/cca011551.o(.text 0x11): undefined reference to `cos'

要修復它,需要明確鏈接到匹配的庫,在 Makefile (看先前的例子) 里增加一個 -lm 到 LIB 或 LIBS 標記 。

用其他方法嘗試

仍然失敗 如果失敗,參考下列腳本:
make -DUseInstalled -I/usr/X386/lib/X11/config
這個直接方式的類別相當於。

在少數例子里,用 root 運行 ldconfig 可能會解決:
# ldconfig 更新共享庫鏈接符號。

一些 Makefiles 使用你系統里未被承認的庫別名。一個例子,構建可能需要 libX11.so.6 ,但是在 /usr/X11R6/lib 不存在文件或鏈接。然而,在那裡是 libX11.so.6.1。解決方法是用 root 運行ln -s /usr/X11R6/lib/libX11.so.6.1 /usr/X11R6/lib/libX11.so.6 ,接著需要運行 ldconfig 。
有一些包需要你安裝一個或更多庫的升級版本。需要拷貝一個或更多的庫到適當的目錄里,刪除舊的庫,重新設置動態鏈接庫。
4:一些其他的問題處理

安裝一個shell 腳本如果出現:No such file or directory 的錯誤消息。這是可以檢查文件許可權確定文件事可執行的,並檢查文件頭確定是否 shell 或程序是腳本在指定的位置被調用。一個例子,這個腳本可能是這樣開始的:

#!/usr/local/bin/EDEN

如EDEN的實際安裝位置是在你的 /usr/bin 目錄,用一個 /usr/local/bin 替代

這個腳本不能運行有兩個方法來糾正!!

A: 文件頭改成 #!/usr/bin/EDEN

B: 或增加一個鏈接符, ln -s /usr/bin/EDEN

5:一個典型的例子 Xloadimage

首先說明下面的例子來源於國外網站的一個技術實例,這里我做了翻譯和整理。

這個例子展現一個簡單的問題。xloadimage 程序對我的圖形工具的調整設置是有用的附加。從源碼目錄拷貝文件,用 tar xzvf 解壓文件,可是在運行 make 的時候出現令人討厭的錯誤並停止了。

gcc -c -O -fstrength-rece -finline-functions -fforce-mem

-fforce-addr -DSYSV -I/usr/X11R6/include

-DSYSPATHFILE=\"/usr/lib/X11/Xloadimage\" mcidas.c

In file included from /usr/include/stdlib.h:32,

from image.h:23,

from xloadimage.h:15,

from mcidas.c:7:

/usr/lib/gcc-lib/i486-linux/2.6.3/include/stddef.h:215:

conflicting types for `wchar_t'

/usr/X11R6/include/X11/Xlib.h:74: previous declaration of

`wchar_t'

make[1]: *** [mcidas.o] Error 1

make[1]: Leaving directory

`/home/thegrendel/tst/xloadimage.4.1'

make: *** [default] Error 2

這個錯誤消息包含了實質的線索:

查看 image.h 文件的 23 行:
#include < stdlib.h>
在源碼的某處對於 xloadimage, wchar_t 已經在指定標准 include 文件重新定義。 告訴我們首先在 image.h 的 23 行嘗試注釋它,或許 stdlib.h include 是不存在的,畢竟不是所有都是必需的。

在這點,構建中的收益來源於所有任何一個致命錯誤。xloadimage 現在功能正常。

6: 安裝 Linux 包的一些總結

堅持自己動手處理所有的安裝出現的問題,不斷總結努力學習,從錯誤里去仔細研究,努力動手排錯,從每個不足甚至失敗的地方得到擴充和提升,可以增強安裝構建軟體的技巧。

閱讀全文

與xlib編程例子相關的資料

熱點內容
mc手機版如何免費開伺服器 瀏覽:627
加密貨幣延期發布 瀏覽:978
福昕pdf閱讀器刪除 瀏覽:436
app收集信息怎麼設置 瀏覽:288
python少兒編程圖 瀏覽:747
命令方塊解禁 瀏覽:930
海康威視伺服器地址和設備標識 瀏覽:298
做網站用php還是html 瀏覽:199
臉部識別演算法模型廠家 瀏覽:176
反編譯的程序帶注釋嗎 瀏覽:713
安裝軟體伺服器未響應怎麼解決 瀏覽:531
閥門開度單片機 瀏覽:568
python多線程有什麼坑 瀏覽:681
程序員從互聯網跳槽到銀行里 瀏覽:244
百度網盤資源解壓後暫不支持在線 瀏覽:220
android自動化環境 瀏覽:253
androidrealm加密 瀏覽:513
地圖正在解壓縮是什麼意思 瀏覽:217
電腦軟體能放在文件夾嗎 瀏覽:786
uc伺服器怎麼打開 瀏覽:364