freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux環(huán)境下多媒體教學(xué)系統(tǒng)的設(shè)計與實現(xiàn)的學(xué)士學(xué)位畢業(yè)論文-資料下載頁

2025-06-19 14:14本頁面
  

【正文】 if ( *lpszCode == 39。139。 ) { ulBuff = ulBuff | 0x00000001。 } if ( nShift = ( sizeof(ulBuff) * 8 ) ) // 每32位做一次寫入操作 { *(unsigned long*)pucDestCur = ulBuff。 pucDestCur += sizeof(unsigned long)。 nShift = 0。 ulBuff = 0l。 } lpszCode++。 } } if ( nShift != 0 ) // 對最后不滿32位的編碼后數(shù)據(jù)補(bǔ)滿32位,寫入目標(biāo)緩沖區(qū) { ulBuff = ulBuff ( sizeof(ulBuff) * 8 nShift )。 *(unsigned long*)pucDestCur = ulBuff。 pucDestCur += sizeof(unsigned long)。 } ……}其中,Huffman樹結(jié)點的數(shù)據(jù)結(jié)構(gòu)如下:typedef struct{ int nParent。 // 父結(jié)點指針 int nLChild。 // 左孩子結(jié)點指針 int nRChild。 // 右孩子結(jié)點指針 unsigned char ucByte。 // 碼元 long lTimes。 // 碼元出現(xiàn)的次數(shù)} HuffNodeType。Huffman樹的數(shù)據(jù)結(jié)構(gòu)如下typedef struct{ HuffNodeType *aHuff。 // Huffmam樹結(jié)點數(shù)組 int nCnt。 // 碼元種類數(shù) int nMax。 // 結(jié)點總數(shù)} HuffTreeType。Huffman解碼的過程為其逆過程,相對簡單,這里省略。 圖像發(fā)送、接收模塊圖像發(fā)送模塊實際上是一個UDP發(fā)送線程,負(fù)責(zé)將壓縮后的圖像數(shù)據(jù)封包并發(fā)送;相應(yīng)的,圖像接收模塊實際上是一個UDP接收線程,負(fù)責(zé)接收并組合圖像數(shù)據(jù)。由于壓縮策略是把四幅圖像作為一組,每組第1幅圖像作為主關(guān)鍵幀只進(jìn)行幀內(nèi)壓縮,從第2幅圖像開始要先參考主關(guān)鍵幀進(jìn)行幀間壓縮,再進(jìn)行幀內(nèi)壓縮,所以封裝成UDP包的時候,要給每個包前加上一個圖像數(shù)據(jù)包信息頭,以便接收方確定數(shù)據(jù)包的順序。圖像數(shù)據(jù)包信息頭的格式為:表41圖像數(shù)據(jù)包信息頭的格式組號組內(nèi)幀號幀內(nèi)包號幀內(nèi)包數(shù)鼠標(biāo)X坐標(biāo)鼠標(biāo)Y坐標(biāo)保留組號:guint32類型,占四個字節(jié)。使用四個字節(jié)是保證組號在短期內(nèi)不會用完,如果每秒能傳送一組圖像,則這個組號要136年才能用完。組內(nèi)幀號:guint16類型,占兩個字節(jié)。因為每組圖像只有4幅,所以值一般為1~4。幀內(nèi)包號:guint16類型,占兩個字節(jié)。接收端用于判斷該包是否接收過。幀內(nèi)包數(shù):guint16類型,占兩個字節(jié)。一幅圖像有若干包組成,包數(shù)由圖像的大小決定,接收端用該值判斷當(dāng)前圖像是否接收完整。鼠標(biāo)X坐標(biāo):guint16類型,占兩個字節(jié)。截屏?xí)r鼠標(biāo)的X坐標(biāo)。鼠標(biāo)Y坐標(biāo):guint16類型,占兩個字節(jié)。截屏?xí)r鼠標(biāo)的Y坐標(biāo)。保留:guint16類型,占兩個字節(jié)。為了使信息頭湊滿4的整數(shù)倍,設(shè)置了這個保留字段。其數(shù)據(jù)結(jié)構(gòu)定義如下:typedef struct tagSCREENPACKINFOHEADER{ guint32 ui32GroupNo。 // 組號 guint16 ui16GroupFrameNo。 // 組內(nèi)幀號 guint16 ui16PackageNo。 // 幀內(nèi)包號 guint16 ui16PackageNum。 // 幀內(nèi)包數(shù) guint16 ui16CursorX。 // 當(dāng)前鼠標(biāo)位置的X坐標(biāo) guint16 ui16CursorY。 // 當(dāng)前鼠標(biāo)位置的Y坐標(biāo) guint16 ui16Reserved。 / /保留} SCREENPACKINFOHEADER, *PSCREENPACKINFOHEADER。 遠(yuǎn)程遙控模塊遠(yuǎn)程遙控模塊負(fù)責(zé)捕獲教師端的鍵盤、鼠標(biāo)操作,然后發(fā)送相對應(yīng)的控制指令給教師端命令控制模塊。該模塊專為遠(yuǎn)程控制而設(shè)計,而遠(yuǎn)程控制時教師端接收的圖像由圖像顯示模塊顯示出來,圖像的顯示使用了GdkCanvas部件,因而捕獲教師端的鍵盤、鼠標(biāo)操作實際上就是捕獲教師端在GdkCanvas上的鍵盤和鼠標(biāo)事件。接收在GdkCanvas上產(chǎn)生的事件使用到GdkCanvas提供的一個回調(diào)函數(shù):on_gdkcanvas_event(),如下:gboolean on_gdkcanvas_event(GtkWidget *widget, GdkEvent *event, gpointer user_data){ …… switch ( (gint)eventtype ) { case GDK_MOTION_NOTIFY: // 鼠標(biāo)移動 case GDK_BUTTON_PRESS: // 鼠標(biāo)按鍵按下 { …… switch ( event ) { case 1: // 鼠標(biāo)左鍵按下 case 3: // 鼠標(biāo)右鍵按下 } } case GDK_BUTTON_RELEASE: // 鼠標(biāo)按鍵放開 { …… switch ( event ) { case 1: // 鼠標(biāo)左鍵放開 case 3: // 鼠標(biāo)右鍵放開 } } case GDK_KEY_PRESS: // 鍵盤按鍵按下 case GDK_KEY_RELEASE: // 鍵盤按鍵放開 …… } 將與鍵盤、鼠標(biāo)事件對應(yīng)的控制指令發(fā)送給教師端命令控制模塊 ……} 鍵盤、鼠標(biāo)控制模塊鍵盤、鼠標(biāo)控制模塊負(fù)責(zé)在學(xué)生端被遠(yuǎn)程控制時,模擬出與教師端相同的鍵盤和鼠標(biāo)操作。模擬鍵盤和鼠標(biāo)操作實際上就是在學(xué)生端模擬鍵盤和鼠標(biāo)事件,然后讓系統(tǒng)處理模擬出來的事件。在GNOME下模擬事件是一件比較復(fù)雜的事情,國內(nèi)外并沒有太多關(guān)于此方面的資料。 GNOME軟件層次的了解,我們可以知道本系統(tǒng)屬于Application層次的程序,要模擬事件,只能從以下幾個庫入手:GNOME庫、GTK+庫、GDK庫、Xlib、glib、C函數(shù)庫。其中,GNOME庫只是對GTK+庫的擴(kuò)展,提供了一些小部件,所以在GNOME層上不能實現(xiàn)我們的目標(biāo);在GTK+和GDK層上,可以通過改寫事件循環(huán)來模擬事件,不過這樣做過于繁瑣,而且很難找到詳細(xì)的資料,于是先不作考慮;網(wǎng)上有人建議使用Xlib、glib寫鍵盤和鼠標(biāo)驅(qū)動,以達(dá)到模擬鍵盤和鼠標(biāo)事件的效果,不過這樣做過于復(fù)雜,也放棄了;最后,我在國外的網(wǎng)站上找到一個叫作XTest的庫,調(diào)用該庫的函數(shù)可以直接模擬各種鍵盤和鼠標(biāo)事件,完全符合我們當(dāng)前的需求。下面對XTest庫和其使用方法做一個簡單說明:XTest實際上是Xlib的一個擴(kuò)展庫,國外網(wǎng)站對它的介紹是:XTest is a small program used to test X configuration which is used by the Red Hat Linux installation program anaconda, and other X configuration utilities. This extension is required to pletely test the X11 server with no user :XTest是被Red Hat Linux安裝程序“anaconda”和其他X配置工具用來測試X配置的小程序。這個擴(kuò)展庫被要求在無人干涉的情況下完成對X11服務(wù)器的測試。完全安裝Ret Hat Linux ,XTest庫已經(jīng)自動安裝進(jìn)入系統(tǒng),頭文件在/usr/X11R6/include/X11/extensions里可以找到。根據(jù)庫說明,調(diào)用該庫函數(shù)必須包含頭文件“X11/extensions/”,并在連接時加上參數(shù)“l(fā)Xi –lXtst –lXext –lX11”。本系統(tǒng)調(diào)用的XTest庫函數(shù)如下:XTestFakeMotionEvent() // 模擬鼠標(biāo)移動事件XTestFakeButtonEvent() // 模擬鼠標(biāo)按鍵事件XTestFakeKeyEvent() // 模擬鍵盤按鍵事件詳細(xì)信息以及其他庫函數(shù)調(diào)用請參見::507/en/man/ 關(guān)機(jī)、重啟模塊關(guān)機(jī)、重啟模塊只是簡單的調(diào)用了system()系統(tǒng)調(diào)用,其中:關(guān)機(jī)的調(diào)用是:system( shutdown h now )。重啟的調(diào)用是:system( shutdown r now )。 學(xué)生登錄模塊圖42學(xué)生登錄模塊學(xué)生登錄模塊分為兩部分:一部分是圖形界面下的,用于讓學(xué)生填寫登錄信息,實際就是一個登錄界面,如下:另一部分是字符界面的,在Linux系統(tǒng)初始化結(jié)束后但尚未進(jìn)入圖形界面之前運(yùn)行,負(fù)責(zé)學(xué)生身份驗證,實際就是一段密碼驗證程序,這里不再詳述。 用戶界面模塊用戶界面模塊實際就是教師端的主界面,教師端的所有操作均在此界面上完成,這里省略。 第5章 使用說明本章的主要內(nèi)容:軟件文件列表軟件的安裝與卸載軟件使用說明 教師端文件列表教師端包括3個文件,它們分別是:CyTeacher:教師端主程序:教師端配置文件:Galde生成的教師端圖形界面文件 學(xué)生端文件列表學(xué)生端包括5個文件,它們分別是:CyStudent:學(xué)生端主程序:學(xué)生端配置文件:Galde生成的學(xué)生端圖形界面文件CyLogin:學(xué)生端字符界面身份驗證程序:學(xué)生端身份驗證程序配置文件本軟件是一個基于TCP/IP協(xié)議和Linux操作系統(tǒng)的教學(xué)工具,可運(yùn)行于Red Hat Linux的GNOME下。運(yùn)行本軟件前首先應(yīng)確保TCP/IP協(xié)議已被安裝且網(wǎng)絡(luò)連接無誤,否則本軟件會提出錯誤。 教師端的安裝與卸載安裝:把CyTeacher下的所有文件拷貝到/usr/share/Cy/CyTeacher下,[IP]主鍵下的子鍵[From]和[To]分別改成當(dāng)前網(wǎng)段的起始地址和結(jié)束地址,就可以直接雙擊cyteacher來運(yùn)行教師端了。卸載:直接刪除/usr/share/Cy/CyTeacher的所有文件即可。 學(xué)生端的安裝安裝:把CySytdent下的所有文件拷貝到/usr/share/Cy/CySytdent下,把CyLogin下的所有文件拷貝到/usr/Cy/CyLgoin下,[Server]主鍵下的子鍵[IP]改成當(dāng)前登錄驗證服務(wù)器的IP地址,然后以管理員身份登錄,在/etc/“/usr/share/Cy/CyLogin/cylogin”,并運(yùn)行g(shù)nomesessionproperties打開會話窗口,在啟動程序里添加“/usr/share/Cy/CyStudent/cystudent”,以后每次學(xué)生啟動Linux時會在字符界面下自動運(yùn)行cylogin身份驗證程序,并在進(jìn)入圖形界面時自動加載學(xué)生端主程序。卸載:直接刪除/usr/Cy/CyTeacher的所有文件,以以管理員身份登錄,去掉/etc/“/usr/share/Cy/CyLogin/cylogin”一行,并打開GNOME會話窗口,刪除啟動程序里的 “/usr/share/Cy/CyStudent/cystudent”即可。 教師端的使用啟動教師端后會顯示如圖所示的界面:圖51 教師端該界面包括一個菜單欄、一個工具條和一個學(xué)生端信息列表,如果有學(xué)生端連接,則列表中會增加一條該學(xué)生端的信息,如下:圖52 教師端連接學(xué)生(1)屏幕廣播:點擊菜單欄中的“屏幕”子菜單,再選擇“開始屏幕廣播”菜單選項(或者點擊工具欄里第一個圖標(biāo))就可以開始屏幕廣播了;若要結(jié)束屏幕廣播,選擇同一子菜單下的“結(jié)束屏幕廣播”菜單選項(或者點擊工具欄里第二個圖標(biāo))即可。(2)遠(yuǎn)程監(jiān)控:選中學(xué)生端信息列表中的某個學(xué)生端,點擊菜單欄中的“遠(yuǎn)程控制”子菜單,再選擇“開始遠(yuǎn)程監(jiān)控”菜單選項(或者點擊第三個圖標(biāo))就可以對所選擇的學(xué)生端進(jìn)行遠(yuǎn)程監(jiān)控了,此時會彈出一個窗口,顯示被監(jiān)控的學(xué)生端的屏幕圖像(如圖53),只要保持該窗口在前臺,在教師端的鍵盤操作就會反映在該學(xué)生端上,另外,只要保持鼠標(biāo)才該窗口中,在教師端的鼠標(biāo)操作也會反映在該學(xué)生端上;若要結(jié)束遠(yuǎn)程監(jiān)控,選擇同一子菜單下的“結(jié)束遠(yuǎn)程監(jiān)控”菜單選項(或者點擊第四個圖標(biāo))即可。(3)遠(yuǎn)程重啟、關(guān)機(jī)圖53遠(yuǎn)程控制選中學(xué)生端信息列表中的某個學(xué)生端,點擊菜單欄中的“遠(yuǎn)程控制”子菜單,再選擇“遠(yuǎn)程重啟”菜單選項(或者點擊第五個圖標(biāo))和“遠(yuǎn)程關(guān)機(jī)”菜單選項(或者點擊第六個圖標(biāo))就可以使所選擇的學(xué)生端強(qiáng)迫重啟和關(guān)機(jī)屏幕廣播配置點擊菜單欄中的“配置”子菜單,再選擇“屏幕廣播配置”菜單選項,就會彈出“屏幕廣播配置”對話框(如下圖),這里可以改變屏幕廣播時教師端截屏大小和學(xué)生端顯示的大小。圖54屏幕廣播配置點擊菜單欄中的“配置”子菜單,再選擇“遠(yuǎn)程監(jiān)控配置”菜單選項,就會彈出“遠(yuǎn)程監(jiān)控配置”對話框(如下圖),這里可以改變遠(yuǎn)程監(jiān)控時學(xué)生端截屏大小和教師端顯示的大小。圖55 遠(yuǎn)程監(jiān)控配置 學(xué)生端的使用學(xué)生端的身份驗證程序在每次開機(jī)Linux初始化完成后自動運(yùn)行,提示學(xué)生端用戶輸入卡號或者學(xué)號(由配置文件決定),并輸入密碼,如驗證通過則進(jìn)入Linux圖形界面,否則重新輸入卡號/學(xué)號和密碼,多次驗證錯誤后,管理員
點擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1