青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

《Windwos via C++》之精華

  來自:夢在天涯C++博客(http://www.shnenglu.com/mzty/)

引言

作為一名windows系統(tǒng)上圖形軟件開發(fā)者已經(jīng)有3個多年頭了,在此過程中有不少的經(jīng)歷和經(jīng)驗,非常高興與大家分享,今天主要是《windows via C++》一書的閱讀心得,所以主要談到的是windowsC++的開發(fā)。

 

C++語言

我們知道C++是一門ISO的面向對象的語言,下面我介紹他的三個方面,也正是這三個主要方面決定了他被廣泛的使用。第一,C++是一個功能強大的語言。比如C++語言本身提供的基于C語言的內嵌類型,數(shù)組,結構體和指針等,C++C新加入的面向對象的Class,繼承,多態(tài)和模板等,還有C++標準模板庫(STL)提供的實際開發(fā)當中常用的數(shù)據(jù)結構和算法的實現(xiàn);第二,大量的開源和第三方庫,如果在windows上使用C++開發(fā),我們還可以借助microsoftC++提供的強有力的支持,首先的VS編譯器,還有UIMFC,還有ATL等;除此之外我們還可以看到其他的許多非microsoft的開源的和第三方的支持,比如說Boost很大程度的擴充了STL,提供了更多更高級的功能,還有LokiC++與設計模式結合起來,還有很多的第三方的UI庫,比如QTWxWindowsWTLGTK等,第三方的網(wǎng)絡通信庫,比如ACEStreamModule等,第三那的XML庫,比如XercesCMarkuptinyxml等,第三方的科學計算庫,比如Blitz++MTL等,第三方的游戲開發(fā)庫,比如OGREKlayGE等,第三方的線程庫,比如C++ ThreadsZThreads等,還有其他的很多。第三,C++的高性能。這個也是毋庸質疑的,我們知道的大部分的操作系統(tǒng),嵌入式開發(fā),游戲,圖像軟件離不開C++,這都是跟C++的高性能有很大的關系。但從這一點來看,這就是很多現(xiàn)代的其他的高級語言沒有的,所以C++以后仍然有很長的路要走。

 

Windows via c++》之經(jīng)典

上面說了C++語言本身,這里具體到windows系統(tǒng)上C++的開發(fā),我們要基于windows系統(tǒng)開發(fā)軟件,就難免的要和windows系統(tǒng)打交道,比如系統(tǒng)本身對字符編碼的支持,系統(tǒng)的異常處理機制,線程的創(chuàng)建管理,進程的創(chuàng)建管理,內存和虛擬內存的使用,堆棧的操作,DLL的使用等。上面提到的這些都不是C++語言本身的職責,是需要操作系統(tǒng)提供的支持,而所有這些內容正是《windows via C++》所覆蓋的內容,也正是本書很好的把C++Windows連接起來,引領C++程序員走向windows的底層,這也正是本書的經(jīng)典之處!再次感謝作者Jeffrey Richter的偉大貢獻!

 

1)字符編碼:字符編碼作為字符串的基礎,自然而然就成了我們軟件開發(fā)必不可缺少的基石,那么什么是字符編碼那?字符編碼就是字符在計算機內部的表示形式,我們都知道在計算機內部,所有的信息最終都表示為一個二進制的字符串。每一個二進制位(bit)有01兩種狀態(tài),因此八個二進制位就可以組合出256種狀態(tài),這被稱為一個字節(jié)(byte)。上個世紀60年代,美國制定了一套字符編碼,對英語字符與二進制位之間的關系,做了統(tǒng)一規(guī)定。這被稱為ASCII碼,一直沿用至今。ASCII碼一共規(guī)定了128個字符的編碼,因為他只占用了一個字節(jié)的后面7位,最前面的1位統(tǒng)一規(guī)定為0。英語用128個符號編碼就夠了,但是用來表示其他語言,128個符號是不夠的。所以后來就各國有了各國的編碼,比如日文中的漢字遠遠大于256個,所以日文使用如果第一個字符在0 x 8 1 0 x 9 F 之間,或者在0 x E 0 0 x F C 之間,那么就必須觀察下一個字節(jié),才能確定字符串中的這個完整的字符。這樣他就使用一個或兩個字節(jié)來表示一個字符,這種編碼被稱為雙字節(jié)字符集(D B C S )。由于世界上存在著多種編碼方式,這使得同一個二進制數(shù)字可以被解釋成不同的符號。因此,要想打開一個文本文件,就必須知道它的編碼方式,否則用錯誤的編碼方式解讀,就會出現(xiàn)亂碼。這個時候Unicode就出現(xiàn)了他將世界上所有的符號都納入其中。每一個符號都給予一個獨一無二的編碼,那么亂碼問題就會消失。但是unicode也有不同的實現(xiàn),主要的有三種:UTF-16:其本身就是標準的Unicode編碼方案,又稱為UCS-2,它固定使用16 bits(兩個字節(jié))整數(shù)來表示一個字符。UTF-32:又稱為UCS-4,它固定使用32 bits(四個字節(jié))整數(shù)來表示一個字符。UTF -8:最廣泛的使用的UTF方案,UTF-8使用可變長度字節(jié)來儲存Unicode字符,例如ASCII字母繼續(xù)使用1字節(jié)儲存,重音文字、希臘字母或西里爾字母等使用2字節(jié)來儲存,而常用的漢字就要使用3字節(jié)。輔助平面字符則使用4字節(jié)。UTF-8更便于在使用Unicode的系統(tǒng)與現(xiàn)存的單字節(jié)的系統(tǒng)進行數(shù)據(jù)傳輸和交換。與前兩個方案不同:UTF-8以字節(jié)為編碼單元,沒有字節(jié)序的問題。但是不管是哪種unicode的實現(xiàn)都可以包含世界所有的字符,解決軟件本地化的難題。

 

Windows2000以前使用ASCII2000及以后的系統(tǒng)都使用unicode來編碼,但是需要注意的是Windows2000既支持Unicode,也支持ANSI,因此可以為任意一種開發(fā)應用程序.如果調用任何一個Windows函數(shù)并給它傳遞一個ANSI字符串,那么系統(tǒng)首先要將字符串轉換成Unicode,然后將Unicode字符串傳遞給操作系統(tǒng)。如果希望函數(shù)返回ANSI字符串,系統(tǒng)就會首先將Unicode字符串轉換成ANSI字符串,然后將結果返回給你的應用程序。所有這些轉換操作都是在你看不見的情況下發(fā)生的。當然,進行這些字符串的轉換需要占用系統(tǒng)的時間和內存。比如同一個函數(shù)CreateWindowEx(),在內部其實是當ASCII是調用CreateWindowExA(),而當unicode時調用CreateWindowExW()。同時windows系統(tǒng)還給我們提供了ASCIIunicode間的轉化函數(shù)MultiByteToWideChar()和WideCharToMultiByte()

 

2)進程和線程:進程通常被定義為一個正在運行的程序的實例,它由兩個部分組成,第一, 一個是操作系統(tǒng)用來管理進程的內核對象,內核對象也是系統(tǒng)用來存放關于進程的統(tǒng)計信息的地方;第二,是地址空間,它包含所有可執(zhí)行模塊或 D L L 模塊的代碼和數(shù)據(jù),它還包含動態(tài)內存分配的空間,如線程堆棧和堆分配空間。線程是應用程序執(zhí)行時的最小單位,同樣線程也是由兩個部分組成的:第一, 一個是線程的內核對象,操作系統(tǒng)用它來對線程實施管理,內核對象也是系統(tǒng)用來存放線程統(tǒng)計信息的地方;第二,線程堆棧,它用于維護線程在執(zhí)行代碼時需要的所有函數(shù)參數(shù)和局部變量。

 

進程是不活潑的,從來不執(zhí)行任何東西,它只是線程的容器,若要使進程完成某項操作,它必須擁有一個在它的環(huán)境中運行的線程,該線程負責執(zhí)行包含在進程的地址空間中的代碼,當創(chuàng)建一個進程時,系統(tǒng)會自動創(chuàng)建它的第一個線程,稱為主線程,然后,該線程可以創(chuàng)建其他的線程,而這些線程又能創(chuàng)建更多的線程。如果在單進程環(huán)境中,你有兩個或多個線程正在運行,那么這兩個線程將共享單個地址空間。這些線程能夠執(zhí)行相同的代碼,對相同的數(shù)據(jù)進行操作。這些線程還能共享內核對象句柄,因為句柄表依賴于每個進程而不是每個線程存在。

windows提供和很多函數(shù)來創(chuàng)建和管理線程和進程,比如CreateThread(),ExitThread(),TerminateThread(),GetCurrentThread()CreateProcess(),ExitProcess(),TerminateProcess (),GetCurrentProcess()等。

 

3)線程同步和線程局部存儲:由于同一進程的所有線程共享進程的虛擬地址空間,并且線程的中斷是匯編語言級的,所以可能會發(fā)生兩個線程同時訪問同一個對象(包括全局變量、共享資源、API函數(shù)和MFC對象等)的情況,這有可能導致程序錯誤。屬于不同進程的線程在同時訪問同一內存區(qū)域或共享資源時,也會存在同樣的問題。因此,在多線程應用程序中,常常需要采取一些措施來同步線程的執(zhí)行。

 

windows提供了3中同步機制,分別是信號量Semaphore,互斥量Mutex,關鍵代碼段CriticalSection。其中信號量Semaphore,是一個可以限制對指定的臨界段進行訪問的線程的數(shù)目的數(shù)據(jù)結構。互斥量Mutex和關鍵代碼段CriticalSection,他們的作用是相同的,都是用來保證某時刻只有一個線程能夠訪問全局或靜態(tài)的資源。區(qū)別是:Mutex是內核對象,可以設置等待超時時間,可以在不同的進程的線程中使用,但是所消耗的時間也比較多。CriticalSectionMutex相反。

 

線程局部存儲(TLS),可以為全局或靜態(tài)變量對不同的線程有不同的拷貝。

 

4)線程池:可以實現(xiàn)在程序中根據(jù)需要動態(tài)的創(chuàng)建線程,比如在server端,根據(jù)訪問的用戶的多少來創(chuàng)建線程的多少。在windows2000以后增加了創(chuàng)建線程池的API,比如 QueueUserWorkItem()。

 

5) 纖程:用戶級的線程機制,比線程小的單位,開發(fā)人員負責管理纖程的調度,同時負責確定纖程何時在線程時間片上下文中運行,一般不會帶來性能的提高,主要的目的是為開發(fā)人員調度多個不需要并行執(zhí)行的任務提供一個便捷的機制。單線程可以包含一個或多個纖程。就內核而言,線程是搶占調度的,是正在執(zhí)行的代碼。然而,線程每次執(zhí)行一個纖程的代碼,你決定究竟執(zhí)行哪個纖程,你可以調用ConvertThreadToFiber()將已有的線程轉化位纖程,當對纖程的執(zhí)行環(huán)境進行分配和初始化后,就可以將執(zhí)行環(huán)境的地址與線程關聯(lián)起來,該線程被轉換成一個纖程,而纖程則在該線程上運行。現(xiàn)在,如果你的纖程(線程)返回或調用ExitThread函數(shù),那么纖程和線程都會終止運行。除非打算創(chuàng)建更多的纖程以便在同一個線程上運行,否則沒有理由將線程轉換成纖程。若要創(chuàng)建另一個纖程,該線程(當前正在運行纖程的線程)可以調用CreateFiber函數(shù)。但是調用CreateFilber創(chuàng)建的纖程并不執(zhí)行,直到調用SwitchToFiber函數(shù)。若要撤消纖程,可以調用DeleteFiber函數(shù)。

 

6) 作業(yè):作業(yè)可以看作是一組進程的容器,把這些進程當作一個整體,對這個整體整個加入更多的限制. 因為Windows并不維護進程之間的父/子關系。即使父進程已經(jīng)終止運行,子進程仍然會繼續(xù)運行。Microsoft Windoss 2000提供了一個新的作業(yè)內核對象,使你能夠將進程組合在一起,并且創(chuàng)建一個“沙框”,以便限制進程能夠進行的操作。最好將作業(yè)對象視為一個進程的容器。但是,創(chuàng)建包含單個進程的作業(yè)是有用的,因為這樣一來,就可以對該進程加上通常情況下不能加的限制。創(chuàng)建一個新作業(yè)內核對象可以調用CreateJobObject(),另一個進程要訪問作業(yè),可以通過OpenJobObject(),應該知道,關閉作業(yè)對象并不會迫使作業(yè)中的所有進程終止運行。該作業(yè)對象實際上做上了刪除標記,只有當作業(yè)中的所有進程全部終止運行之后,該作業(yè)對象才被自動撤消。注意,關閉作業(yè)的句柄后,盡管該作業(yè)仍然存在,但是該作業(yè)將無法被所有進程訪問。通過調用SetInformationJobObject()可以給作業(yè)加上各種限制.查詢限制QueryInformationJobObject(),將進程放入作業(yè)AssignProcessToJobObject(),若要撤銷作業(yè)中的進程調用TerminateJobObject()。

 

7) 虛擬內存,內存映射文件和堆棧:每個進程都被賦予它自己的虛擬地址空間。對于3 2位進程來說,這個地址空間是4 G B,其中默認有2G是用戶可以使用的。由于每個進程可以接收它自己的私有的地址空間,因此當進程中的一個線程正在運行時,該線程可以訪問只屬于它的進程的內存。屬于所有其他進程的內存則隱藏著,并且不能被正在運行的線程訪問。注意在Windows 2000中,屬于操作系統(tǒng)本身的內存也是隱藏的,正在運行的線程無法訪問。這意味著線程常常不能訪問操作系統(tǒng)的數(shù)據(jù)。

 

Windows提供了3種進行內存管理的方法,它們是第一, 虛擬內存,最適合用來管理大型對象或結構數(shù)組。 第二,內存映射文件,最適合用來管理大型數(shù)據(jù)流(通常來自文件)以及在單個計算機上運行的多個進程之間共享數(shù)據(jù)。第三, 內存堆棧,最適合用來管理大量的小對象。

 

在較老的操作系統(tǒng)中,物理存儲器被視為計算機擁有的R A M的容量。換句話說,如果計算機擁有1 6 M BR A M,那么加載和運行的應用程序最多可以使用1 6 M BR A M。今天的操作系統(tǒng)能夠使得磁盤空間看上去就像內存一樣。磁盤上的文件通常稱為頁文件,它包含了可供所有進程使用的虛擬內存。

 

內存映射文件與虛擬內存一樣,內存映射文件可以用來保留一個地址空間的區(qū)域,并將物理存儲器提交給該區(qū)域。它們之間的差別是,物理存儲器來自一個已經(jīng)位于磁盤上的文件,而不是系統(tǒng)的頁文件。一旦該文件被映射,就可以訪問它,就像整個文件已經(jīng)加載內存一樣。

 

堆棧可以用來分配許多較小的數(shù)據(jù)塊。例如,若要對鏈接表和鏈接樹進行管理,最好的方法是使用堆棧,堆棧的優(yōu)點是,可以不考慮分配粒度和頁面邊界之類的問題,集中精力處理手頭的任務。堆棧的缺點是,分配和釋放內存塊的速度比其他機制要慢,并且無法直接控制物理存儲器的提交和回收。進程和線程都有自己的堆棧,而且大小可以更改。

 

8) DLL使用:windows中廣泛的使用dll來實現(xiàn)模塊化,dll的使用一般有靜態(tài)和動態(tài)加載,靜態(tài)加載一般通過編譯器的設置來實現(xiàn),動態(tài)加載通過使用loadlibrary()和freelibrary()來實現(xiàn)。

 

9)結構化異常處理(SEH):SEH Windows 系統(tǒng)提供的異常處理功能,跟開發(fā)工具無關。windows上其他程序中的異常處理一般底層都是轉化為SEH來實現(xiàn)。實際上,當你寫一條C++ throw語句時,編譯器就生成一個對WindowsRaiseException函數(shù)的調用。用于throw語句的變量傳遞給RaiseException作為附加的參數(shù)。

 

Windows via c++》之新增

 

164位支持:最新的系統(tǒng)有64的版本,這樣的話進程就不再有最大4G的內存限制,但是由于64位系統(tǒng)與以前的32位系統(tǒng)其實是一個codebase,所以基本有所的接口都與以前32位保持椅子,這樣的話我們以前的所有的32位的程序只需要從新編譯就可以運行在64系統(tǒng)上,需要特別注意的是指針和句柄的從32位到64位的轉變。

 

2windows vista/2008特有:提供了更加安全的stirng函數(shù),一些內核對象的改變等。

 

3)可重復使用的代碼:大量可在我們日常開發(fā)中重復使用的代碼和讓我們更好的理解進程的源代碼processInfoLockCop等。

 

總結

總之,通過閱讀《Windows via C++》使我們更好的了解windows系統(tǒng),更好的在windows進行C++開發(fā)!推薦windowsC++開發(fā)人員可以一讀!

posted on 2008-07-13 10:37 夢在天涯 閱讀(8489) 評論(7)  編輯 收藏 引用 所屬分類: My Project

評論

# re: 《Windwos via C++》之精華 2008-07-14 10:03 mAGICfLYER

錯字很多,錯詞很多。  回復  更多評論   

# re: 《Windwos via C++》之精華 2008-07-14 10:32 呵呵

寫的不錯,學習了~  回復  更多評論   

# re: 《Windwos via C++》之精華 2008-07-14 12:57 土仔

先收藏了。  回復  更多評論   

# re: 《Windwos via C++》之精華 2008-07-18 17:35 力為

不錯,期待博主的文章很久了。  回復  更多評論   

# re: 《Windwos via C++》之精華 2008-07-22 17:39 Touchsoft

應該是《Windows核心編程》的新版吧  回復  更多評論   

# re: 《Windwos via C++》之精華 2008-07-26 03:57 冷不防

謝謝!  回復  更多評論   

# re: 《Windwos via C++》之精華 2009-10-11 16:33 Smile2life

夢在天涯:
你好,我在編譯該書配套源碼時會遇到很多錯誤,其中第一個錯誤如下1>d:\programfiles\開發(fā)工具\vs8\vc\platformsdk\include\prsht.h(531) : error C2146: 語法錯誤 : 缺少“;”(在標識符“hdr”的前面),雙擊定位到typedef struct _PSHNOTIFY
{
NMHDR hdr;
LPARAM lParam;
} PSHNOTIFY, *LPPSHNOTIFY;好像無法識別該結構“NMHDR ”。能不能指導一下阿,多謝了
  回復  更多評論   

公告

EMail:itech001#126.com

導航

統(tǒng)計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1816188
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲三级性片| 国产日韩欧美在线观看| 一区二区三区日韩| 亚洲欧美电影院| 亚洲精品欧美极品| 亚洲网站在线播放| 精品999在线播放| 在线视频日韩精品| 国产一区二区三区av电影| 日韩视频在线一区二区| 韩国精品在线观看| 亚洲影院污污.| 亚洲国产专区校园欧美| 欧美综合第一页| 亚洲字幕在线观看| 快播亚洲色图| 久久er精品视频| 国产精品xxxxx| 亚洲黄色小视频| 在线观看欧美一区| 欧美一区二区三区四区高清| 在线视频日韩| 欧美理论视频| 久久久噜噜噜久久久| 国产精品qvod| 99av国产精品欲麻豆| 亚洲黄色一区| 久久久www| 免费的成人av| 最新国产成人在线观看| 欧美成人蜜桃| 91久久夜色精品国产网站| 亚洲激情第一页| 欧美岛国在线观看| 日韩特黄影片| 极品av少妇一区二区| 欧美成年人视频网站| 在线视频观看日韩| 久久国产精品免费一区| 免费久久久一本精品久久区| 亚洲大片免费看| 免费视频一区二区三区在线观看| 欧美电影免费观看高清| 亚洲国产清纯| 欧美啪啪成人vr| 中文国产亚洲喷潮| 久久久久久一区二区| 91久久久亚洲精品| 欧美日韩三级| 欧美一区亚洲| 免费精品99久久国产综合精品| 在线观看久久av| 欧美日本一区二区高清播放视频| 亚洲精品影院在线观看| 欧美一区二区三区四区高清| 国模私拍一区二区三区| 男人的天堂成人在线| 农村妇女精品| 一区二区三区黄色| 久久不射网站| 亚洲日韩欧美一区二区在线| 亚洲一区成人| 欧美激情导航| 亚洲视频导航| 欧美激情一区二区三区四区 | 国产亚洲免费的视频看| 久久夜色精品国产亚洲aⅴ| 99热在这里有精品免费| 欧美日韩亚洲一区二区三区| 91久久精品视频| 美女91精品| 麻豆av一区二区三区久久| 亚洲国产精品精华液2区45| 欧美在线视频观看| 久久九九免费| 在线成人av.com| 亚洲精品护士| 亚洲人成艺术| 午夜亚洲激情| 久久久久久久综合狠狠综合| 亚洲国产精品综合| 一本色道久久综合亚洲91| 国产精品国产一区二区| 欧美在线亚洲一区| 久久久www成人免费无遮挡大片| 在线日韩一区二区| 欧美a一区二区| 欧美精品九九| 亚洲美女色禁图| 亚洲无亚洲人成网站77777| 欧美乱人伦中文字幕在线| 久久精品国产精品亚洲综合| 亚洲视频一区| 99re成人精品视频| 亚洲第一综合天堂另类专| 久久精品国产免费| 欧美激情综合五月色丁香小说| 亚洲精品永久免费精品| 免费亚洲电影| 欧美在线视频导航| 美乳少妇欧美精品| 99国产精品国产精品毛片| 久久精品盗摄| 久久精品99国产精品日本| 国产精品一区亚洲| 久久久久一区| 一区二区三区蜜桃网| 久久综合电影一区| 一卡二卡3卡四卡高清精品视频| 欧美日韩一区二区在线观看| 性欧美大战久久久久久久久| 欧美日产在线观看| 亚洲精品一区久久久久久| 99视频一区二区| 欧美日韩国产欧美日美国产精品| 亚洲国产aⅴ天堂久久| 亚洲女与黑人做爰| 欧美视频在线观看视频极品| 欧美亚洲自偷自偷| 欧美xart系列高清| 亚洲色在线视频| 国产日本亚洲高清| 欧美成人精品一区二区| 99re热这里只有精品视频| 欧美一站二站| 亚洲国产精品一区二区www在线| 久久大香伊蕉在人线观看热2| 欧美在线91| 日韩小视频在线观看专区| 香蕉久久一区二区不卡无毒影院| 另类av导航| 亚洲国产精品久久久久久女王| 国产精品日韩专区| 国产精品国产亚洲精品看不卡15| 国产日韩欧美视频| 一区二区激情视频| 欧美高清视频一二三区| 蜜臀av一级做a爰片久久| 亚洲欧美精品伊人久久| 中文在线资源观看网站视频免费不卡| 激情欧美亚洲| 亚洲国产视频a| 亚洲国产视频直播| 亚洲欧洲一区二区天堂久久 | 欧美一区二区视频网站| 欧美精品1区2区3区| 日韩一区二区久久| 亚洲一区二区三区三| 欧美在线在线| 亚洲福利视频网站| 欧美成人69| 欧美夜福利tv在线| 亚洲大胆人体视频| 亚洲视频一区在线| 在线免费高清一区二区三区| 久久婷婷久久| 亚洲一区黄色| 91久久久在线| 免费久久精品视频| 一区二区三区黄色| 精品999成人| 国产日韩欧美一区二区三区在线观看| 欧美77777| 久久精品人人做人人爽电影蜜月| 亚洲精品看片| 欧美成人有码| 欧美激情小视频| 久久精品视频网| 亚洲影院一区| 亚洲国产天堂久久综合| 欧美午夜精品一区| 欧美激情视频一区二区三区不卡| 国产精品免费一区二区三区在线观看 | 麻豆精品视频在线| 亚洲国产aⅴ天堂久久| 欧美亚洲专区| 亚洲国产成人精品女人久久久| 午夜精品99久久免费| 欧美日韩成人在线视频| 亚洲国产午夜| 男女av一区三区二区色多| 欧美一区二区三区免费观看视频| 国产精品a久久久久久| 夜夜嗨av一区二区三区免费区| 亚洲夫妻自拍| 久久综合亚洲社区| 亚洲福利视频二区| 久久伊人亚洲| 极品日韩久久| 国产一区视频在线观看免费| 国产日韩一区二区| 禁断一区二区三区在线 | 欧美不卡福利| 欧美粗暴jizz性欧美20| 一区二区91| 欧美在线中文字幕| 欧美日韩成人在线视频| 国产欧美一区二区视频| 国产深夜精品福利| 亚洲欧洲视频|