久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁(yè) > 編程 > Java > 正文

Windows 95 多線程間同步事件的控制方法

2019-09-06 23:33:43
字體:
供稿:網(wǎng)友

                    摘要:在Windows 95中所有的應(yīng)用程序?qū)嶋H上都以是線程的方式運(yùn)行的。在設(shè)計(jì)多線程應(yīng)用程序中有時(shí)必須在線程之間保持一定的同步關(guān)系,才能使用戶能夠?qū)Κ?dú)立運(yùn)行的線程進(jìn)行有效的控制。為此本文在簡(jiǎn)要介紹Windows 95中線程的概念及其創(chuàng)建方法后,提出了一種在多線程之間利用 event對(duì)象實(shí)現(xiàn)事件同步的控制方法。最后還介紹了在不同應(yīng)用程序之間進(jìn)行同步事件控制的方法,這種方法使得不同應(yīng)用程序進(jìn)行相互間的同步事件控制變得很簡(jiǎn)單。
關(guān)鍵詞:Windows95 線程
同步事件 event
對(duì)象 Win32

一, 引言

Windows 95是一個(gè)多任務(wù)、多線程的操作系統(tǒng),其中的每一個(gè)應(yīng)用程序都是一個(gè)進(jìn)程(process)。進(jìn)程可以創(chuàng)建多個(gè)并發(fā)的線程(thread),同時(shí)進(jìn)程也以主線程(primarythread)的形式被系統(tǒng)調(diào)度。所謂的線程是系統(tǒng)調(diào)度的一個(gè)基本單位, 在程序中線程是以函數(shù)的形式出現(xiàn)的,它的代碼是進(jìn)程代碼的一部分,并與進(jìn)程及其派生的其它線程共享進(jìn)程的全局變量和文件打開表等公用信息。主線程類似于UNIX系統(tǒng)中的父進(jìn)程,線程則類似于子進(jìn)程。主線程也是一個(gè)線程,稱作主線程僅僅是為了和它創(chuàng)建的線程區(qū)別開來。每個(gè)線程都相對(duì)于主線程而獨(dú)立運(yùn)行,為了使得線程能對(duì)用戶的控制作出響應(yīng),必須控制線程的運(yùn)行,比如用戶可暫停、終止一個(gè)線程的運(yùn)行或改變線程運(yùn)行的條件等。而且在用戶控制與線程運(yùn)行之間有時(shí)應(yīng)該有一定的同步控制關(guān)系,以保證用戶對(duì)線程的有效控制。線程可以根據(jù)不同的條件對(duì)用戶的控制作出不同的響應(yīng)。為了實(shí)現(xiàn)上述目的必須使用系統(tǒng)提供的同步對(duì)象(Synchronization Object),如event對(duì)象。 編寫多線程應(yīng)用程序必須使用Win32 API。

二, 線程的創(chuàng)建方法

調(diào)用Win32 API中的CreateThread函數(shù)創(chuàng)建線程。hThread=CreateThread(NULL,0,&TEventWindow::ThreadFunc,this,0,&hThreadId);第一個(gè)參數(shù)設(shè)定線程的安全屬性,因其僅用于Windows NT,故不設(shè)定。第二個(gè)參數(shù)為0指定線程使用缺省的堆棧大小。第三個(gè)參數(shù)指定線程函數(shù),線程即從該函數(shù)的入口處開始運(yùn)行,函數(shù)返回時(shí)就意味著線程終止運(yùn)行。第四個(gè)參數(shù)為線程函數(shù)的參數(shù),可以是指向任意數(shù)據(jù)類型的指針。第五個(gè)參數(shù)設(shè)定線程的生成標(biāo)志。hThreadId存放線程的標(biāo)識(shí)號(hào)。線程函數(shù)如下定義,上述的 this參數(shù)是指向線程所屬窗口的句柄指針,通過thrdWin參數(shù)傳送過來,利用這個(gè)指針再調(diào)用相應(yīng)的LoopFunc函數(shù),線程的具體事務(wù)都在這個(gè)函數(shù)中執(zhí)行。

DWORD _stdcall TEventWindow::ThreadFunc(void *thrdWin){
return STATIC_CAST(TEventWindow*,thrdWin)->LoopFunc( );
}

三, 線程的同步事件控制方法

Windows 95提供兩種基本類型的系統(tǒng)對(duì)象,一種是彼此互斥的對(duì)象,用來協(xié)調(diào)訪問數(shù)據(jù),如 mutex對(duì)象;一種是事件同步對(duì)象,用來發(fā)送命令或觸發(fā)事件,安排事件執(zhí)行的先后次序,如 event對(duì)象。系統(tǒng)對(duì)象在系統(tǒng)范圍內(nèi)有效,它們都具有自己的安全屬性、訪問權(quán)限和以下兩種狀態(tài)中的一種:Signaled和nonSignaled。對(duì)于event對(duì)象調(diào)用SetEvent函數(shù)可將其狀態(tài)設(shè)為Signaled,調(diào)用ResetEvent函數(shù)則可將其狀態(tài)設(shè)為nonSignaled。演示程序中的線程在一個(gè)大循環(huán)中不斷地將運(yùn)行結(jié)果顯示出來,當(dāng)用戶要關(guān)閉窗口時(shí)線程才終止運(yùn)行。不過必須在窗口關(guān)閉之前先終止線程的運(yùn)行,否則線程運(yùn)行的結(jié)果將會(huì)顯示在屏幕的其他地方,所以有必要在線程結(jié)束與關(guān)閉窗口這兩個(gè)事件之間建立起同步關(guān)系。為此在TEventWindow類的構(gòu)造函數(shù)中創(chuàng)建兩個(gè)event對(duì)象,用來實(shí)現(xiàn)事件同步。hCloseEvent=CreateEvent(0,FALSE,FALSE,0); hNoCloseEvent=CreateEvent(0,FALSE,FALSE,0);第二個(gè)參數(shù)為FALSE 表示創(chuàng)建的是一個(gè)自動(dòng)event對(duì)象,第三個(gè)參數(shù)為FALSE表示對(duì)象的初始狀態(tài)為nonSignaled,第四個(gè)參數(shù)為0表示該對(duì)象沒有名字。在TEventWindow類的構(gòu)造函數(shù)中還同樣創(chuàng)建hWatchEvent和hNtyEvent對(duì)象,初始狀態(tài)都為nonSignaled。用戶要關(guān)閉窗口時(shí),程序首先調(diào)用CanClose 函數(shù),在該函數(shù)中設(shè)置hCloseEvent對(duì)象的狀態(tài)為Signaled,利用這個(gè)方法來通知線程,要求線程終止運(yùn)行。然后主線程調(diào)用函數(shù)WaitForMultipleObjects(該函數(shù)以下簡(jiǎn)稱wait函數(shù) ),wait函數(shù)先判斷對(duì)象hThread和hNoCloseEvent中任意一個(gè)的狀態(tài)是否為Signaled, 如果都不是就堵塞主線程的運(yùn)行,直到上述條件滿足;如果有一個(gè)對(duì)象的狀態(tài)為Signaled,wait函數(shù)就返回,不再堵塞主線程。如果對(duì)象是自動(dòng)event對(duì)象,wait函數(shù)在返回之前還會(huì)將對(duì)象的狀態(tài)設(shè)為nonSignaled。wait函數(shù)中的參數(shù)FALSE表示不要求兩個(gè)對(duì)象的狀態(tài)同時(shí)為Signaled,參數(shù)-1表示要無限期地等待下去直到條件滿足,參數(shù)2表示SignalsC數(shù)組中有兩個(gè)對(duì)象。在Windows 95中線程也被看作是一種系統(tǒng)對(duì)象,同樣具有兩種狀態(tài)。線程運(yùn)行時(shí)其狀態(tài)為nonSignaled,如果線程終止運(yùn)行,則其狀態(tài)被系統(tǒng)自動(dòng)設(shè)為Signaled( 可以通過線程的句柄hThread得到線程狀態(tài)),此時(shí)wait函數(shù)返回0,表示第一個(gè)對(duì)象滿足條件,于是CanClose返回TRUE表示窗口可以關(guān)閉;如果線程不能滿足終止運(yùn)行的條件,就設(shè)置hNoCloseEvent 對(duì)象的狀態(tài)為Signaled,此時(shí)wait函數(shù)返回1,表示第二個(gè)對(duì)象滿足條件,于是CanClose返回FALSE表示窗口暫時(shí)還不能關(guān)閉。

BOOL TEventWindow::CanClose(){

HANDLE SignalsC[2]={hThread,hNoCloseEvent};

SetEvent(hCloseEvent);

if(WaitForMultipleObjects(2,SignalsC,FALSE,-1)==0) return TRUE;

else return FALSE;

}

另一個(gè)用戶控制的例子是,用戶使主線程暫停運(yùn)行直到線程滿足某種條件為止。比如用戶選擇“Watch”菜單后,主線程調(diào)用如下函數(shù)開始對(duì)線程的運(yùn)算數(shù)據(jù)進(jìn)行監(jiān)測(cè)。 首先設(shè)置hWatchEvent對(duì)象的狀態(tài)為Signaled,以此來通知線程, 主線程此時(shí)已進(jìn)入等待狀態(tài)并開始對(duì)數(shù)據(jù)進(jìn)行監(jiān)測(cè),然后主線程調(diào)用wait函數(shù)等待線程的回應(yīng)。線程在滿足某個(gè)條件后就設(shè)置hNtyEvent對(duì)象的狀態(tài)為Signaled,使主線程結(jié)束等待狀態(tài),繼續(xù)運(yùn)行。

void TEventWindow::CmWatch(){

SetEvent(hWatchEvent);

WaitForSingleObject(hNtyEvent,-1);

::MessageBox(GetFocus(),"線程已符合條件,主線程繼續(xù)運(yùn)行!","",MB_OK);

}

線程函數(shù)所調(diào)用的LoopFunc是一個(gè)大循環(huán),它不斷地判斷同步對(duì)象的狀態(tài),并根據(jù)這些對(duì)象的狀態(tài)執(zhí)行相應(yīng)的操作,這些對(duì)象在數(shù)組SignalsL中列出。在這個(gè)數(shù)組中各元素的排列順序是很重要的,前兩個(gè)對(duì)象分別對(duì)應(yīng)兩種不同的用戶控制事件,通過判斷對(duì)象的狀態(tài)可以知道發(fā)生的是哪一種用戶控制。只有當(dāng)前面兩個(gè)對(duì)象的狀態(tài)都不是Signaled時(shí)才會(huì)判斷第三個(gè)對(duì)象的狀態(tài),這樣一方面保證線程能檢測(cè)到所有的用戶控制事件,另一方面又保證了在不發(fā)生用戶控制事件時(shí)線程也能繼續(xù)運(yùn)行。為此特地在TEventWindow類的構(gòu)造函數(shù)中創(chuàng)建的對(duì)象hNoBlockEvent的狀態(tài)始終為Signaled。

hNoBlockEvent=CreateEvent(0,TRUE,TRUE,"MyEvent");

第二個(gè)參數(shù)為TRUE表示創(chuàng)建的是一個(gè)手工event對(duì)象, 其狀態(tài)是不會(huì)被wait函數(shù)所改變的,除非顯式地調(diào)用ResetEvent函數(shù)。第三個(gè)參數(shù)為TRUE表示對(duì)象初始狀態(tài)為Signaled,第四個(gè)參數(shù)定義了該對(duì)象的名字為“MyEvent”。LoopFunc函數(shù)調(diào)用wait函數(shù),如果檢測(cè)到hCloseEvent的狀態(tài)為Signaled, 此時(shí)wait函數(shù)返回0,線程知道用戶要關(guān)閉窗口了,就判斷線程是否可以終止,條件是iCount>100,如果滿足終止條件LoopFunc函數(shù)就返回,實(shí)際上就終止了線程的運(yùn)行;如果不滿足條件線程就設(shè)置 hNoCloseEvent對(duì)象的狀態(tài)為Signaled,讓主線程知道線程暫時(shí)還不能終止。由于hCloseEvent是自動(dòng)event對(duì)象,所以wait函數(shù)返回0時(shí)還會(huì)將對(duì)象hCloseEvent的狀態(tài)設(shè)置為nonSignaled,這樣在第二次循環(huán)時(shí),wait函數(shù)就不會(huì)判斷出hCloseEvent對(duì)象的狀態(tài)為Signaled,避免了線程錯(cuò)誤地再次去判斷是否會(huì)滿足終止條件。如果wait函數(shù)檢測(cè)到對(duì)象hWatchEvent的狀態(tài)為Signaled,此時(shí)wait函數(shù)返回1,線程知道主線程已進(jìn)入等待狀態(tài)并在對(duì)數(shù)據(jù)進(jìn)行監(jiān)測(cè),就設(shè)置變量bWatch的值為TRUE。如果前面的兩個(gè)事件都未發(fā)生,則前面兩個(gè)對(duì)象的狀態(tài)都為nonSignaled,于是wait函數(shù)就檢測(cè)第三個(gè)對(duì)象的狀態(tài), 由于第三個(gè)對(duì)象hNoBlockEvent 的狀態(tài)始終為Signaled,所以線程就無阻礙地繼續(xù)運(yùn)行下去,將變量iCount不斷加一,當(dāng)變量大于200時(shí),如果bWatch為TRUE,就設(shè)置hNtyEvent的狀態(tài)為

Signaled,從而使主線程停止等待,繼續(xù)運(yùn)行。

DWORD TEventWindow::LoopFunc(){

HANDLE SignalsL[3]={hCloseEvent,hWatchEvent,hNoBlockEvent};

static BOOL bWatch=false;int dwEvent;

while(1){

dwEvent=WaitForMultipleObjects(3,SignalsL,FALSE,-1);

switch(dwEvent){

case 0: if(iCount>100) return 0;

else SetEvent(hNoCloseEvent);

break;

case 1: bWatch=TRUE;break;

case 2: ++iCount;

if(bWatch && iCount>200) SetEvent(hNtyEvent);

break;

}

}

}

四, 進(jìn)程間的多線程同步事件控制方法

由于event對(duì)象是系統(tǒng)范圍內(nèi)有效的,所以另一個(gè)進(jìn)程(即一個(gè)應(yīng)用程序,本身也是一個(gè)線程)可調(diào)用OpenEvent函數(shù),通過對(duì)象的名字獲得對(duì)象的句柄, 但對(duì)象必須是已經(jīng)創(chuàng)建的,然后可將這個(gè)句柄用于ResetEvent、SetEvent和WaitForMultipleObjects等函數(shù)中。這樣可以實(shí)現(xiàn)一個(gè)進(jìn)程的線程控制另一進(jìn)程生成的線程的運(yùn)行。如下面的語(yǔ)句就是通過對(duì)象名字“MyEvent”獲得了上面進(jìn)程生成的hNoBlockEvent對(duì)象的句柄,再使用這個(gè)句柄將對(duì)象狀態(tài)設(shè)為nonSignaled。在上述的 LoopFunc函數(shù)中由于該對(duì)象的狀態(tài)已經(jīng)改變,使得上面的線程暫停運(yùn)行。

HANDLE hEvent=OpenEvent(EVENT_ALL_ACCESS,true,"MyEvent");

ResetEvent(hEvent);

OpenEvent函數(shù)的第一個(gè)參數(shù)表示函數(shù)的調(diào)用線程對(duì)event對(duì)象的訪問權(quán)限,比如讓線程擁有對(duì)象所有的訪問權(quán)限,就選參數(shù)EVENT_ALL_ACCESS,這樣線程就能用ResetEvent函數(shù)改變對(duì)象的狀態(tài);參數(shù)true表示由這個(gè)進(jìn)程派生的子進(jìn)程可以繼承該句柄;最后一個(gè)參數(shù)指出了event對(duì)象的名字。用下面的語(yǔ)句設(shè)置對(duì)象hNoBlockEvent的狀態(tài)為Signaled,就可以使線程繼續(xù)運(yùn)行,如SetEvent(hEvent)。

進(jìn)程不再使用該句柄時(shí)盡可以用CloseHandle函數(shù)關(guān)閉對(duì)象句柄,但對(duì)于同一個(gè)event對(duì)象而言,因?yàn)樗赡苓€在別的線程中被使用,所以只有在它的所有被引用的句柄都關(guān)閉后對(duì)象才會(huì)被系統(tǒng)釋放,文中提到的所有 event對(duì)象在主線程和線程之間以及在不同的進(jìn)程之間所起的控制作用如圖1所示:
① ┌───────┐ ①:關(guān)閉窗口
┌──→─┤ hCloseEvent ├───┐ ②:對(duì)上面事件的反應(yīng)
│ └───────┘ │ |
│ ┌───────┐ ↓ | 暫停/恢復(fù)線程的運(yùn)行
│ │ hThread 或 │②┌─┴─┐   ┌───────┐ ┌───┐
┌─┴─┐ ┌┤hNoCloseEvent ├←┤ 線程 ├←┤hNoBlockEvent ├←┤進(jìn)程 2│
│主線程├←┘└───────┘ └┬─┬┘    └───────┘ └───┘
│/進(jìn)程1├→┐┌───────┐ ↑ │ |不同進(jìn)程之間
└─┬─┘⑴└┤ hWatchEvent ├──┘ │ |的地址界限
↑ └───────┘ │
│ ┌───────┐ │ ⑴:監(jiān)測(cè)數(shù)據(jù)
└────┤ hNtyEvent ├←───┘ ⑵:線程滿足監(jiān)測(cè)條件
└───────┘⑵

圖1 event對(duì)象在多線程間同步事件控制中的作用

五, 結(jié)束語(yǔ)

多線程編程技術(shù)在多媒體、網(wǎng)絡(luò)通訊、數(shù)學(xué)計(jì)算和實(shí)時(shí)控制方面有著很廣闊的應(yīng)用前景。當(dāng)然在實(shí)際編程中情況往往是很復(fù)雜的,這時(shí)應(yīng)注意的是如何將任務(wù)準(zhǔn)確地劃分成可并發(fā)的線程以及象文中提到的SignalsL數(shù)組中元素的排列順序等問題。本文所講內(nèi)容對(duì)于在Windows NT或在某些支持多線程的UNIX系統(tǒng)中設(shè)計(jì)多線程應(yīng)用程序也是有所幫助的。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

欧洲美女7788成人免费视频| 欧美亚洲一区二区在线| 欧美一区二区私人影院日本| 五月天婷亚洲天综合网鲁鲁鲁| 熟女av一区二区| 亚洲精品视频在线| 91免费欧美精品| 日韩欧美一级视频| 欧美三级一区二区| 精品成在人线av无码免费看| 免费观看久久久4p| 91成人精品网站| 天天看天天摸天天操| 粉嫩老牛aⅴ一区二区三区| 亚洲欧美日产图| 日本一不卡视频| 日韩免费在线观看视频| 五月婷婷激情网| 亚洲第一偷拍网| www午夜视频| 亚洲丝袜精品丝袜在线| 椎名由奈jux491在线播放| 天堂在线资源网| 久久成年人视频| 日韩三级久久久| 欧美一区二区高清| 在线成人免费av| 香蕉av福利精品导航| 国产午夜大地久久| 中文字幕 久热精品 视频在线 | 五月婷在线视频| 国产91精品青草社区| 久久久久女人精品毛片九一| 永久免费毛片在线播放不卡| 91麻豆精品成人一区二区| 日韩电影第一页| 免费在线黄色片| 久久久av网站| av在线资源观看| 国产欧美精品在线播放| 老司机午夜精品视频| 国产精品久久一区| 日本午夜一本久久久综合| 久久大香伊蕉在人线观看热2| 成人性生交大合| 激情综合在线观看| 欧美三级免费观看| 波多野结衣一二三四区| 久久亚洲国产精品成人av秋霞| 天堂а√在线中文在线新版| 日韩美女写真福利在线观看| 麻豆久久久久久| 欧妇女乱妇女乱视频| 色综合久久久久综合体桃花网| 天天插天天射天天干| 操日韩av在线电影| 污视频软件在线观看| 一区精品在线| 欧美日韩一区二区三区四区五区 | 国产精自产拍久久久久久| 国产精品88av| 国产三级三级看三级| 日韩电影中文字幕一区| 亚洲免费成人在线| 亚洲图片小说在线| 欧美精品乱码久久久久久| 国产91精品一区| 久久青青草原一区二区| 色综合久久99| 中文字幕一级片| 亚洲成色www久久网站| 亚洲国产精品欧美一二99| 日本午夜在线观看| 91在线视频精品| 一区二区三区国产豹纹内裤在线| 韩国三级hd中文字幕| 91精品国产综合久久香蕉最新版 | 五月婷婷一区二区| 国产精品国产精品国产专区不卡| 亚洲国产毛片aaaaa无费看| 中文字幕黄色片| 国产96在线 | 亚洲| 在线观看欧美日韩| 91在线视频观看| 久久久久久久久久综合| 特级毛片在线免费观看| www.欧美精品一二三区| 国产人妖乱国产精品人妖| 成年人一级黄色片| 宅男噜噜99国产精品观看免费| 亚洲护士老师的毛茸茸最新章节| 国产电影精品久久禁18| 麻豆网址在线观看| 国产va亚洲va在线va| 欧美精品久久一区二区| 伊人一区二区三区| 熟妇人妻av无码一区二区三区| www.亚洲自拍| 91精品国产综合久久久久久丝袜| 欧美日韩综合不卡| 成人黄色一级视频| 欧美日韩在线视频播放| 中文字幕av专区| 久久福利电影| 性日韩欧美在线视频| 欧美乱妇20p| 久久日韩粉嫩一区二区三区| 91麻豆成人精品国产免费网站| 亚洲精品久久一区二区三区777| 精品亚洲第一| 久久久女女女女999久久| 欧美日韩高清影院| 久久品道一品道久久精品| 国产91免费看| 波多野结衣人妻| 99国产精品免费| 制服丝袜中文字幕第一页 | 欧美日韩精品欧美日韩精品一| 菠萝蜜视频在线观看一区| av免费在线不卡| 久久中文字幕免费| www.99re7| 美女久久久久久久久| 日韩中文字幕二区| 欧美一级爱爱视频| 你懂的网址一区二区三区| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩mp4| 在线精品视频一区二区| 亚洲精品v日韩精品| 亚洲国产成人午夜在线一区| 国产精品亚洲一区二区三区在线| 不卡视频在线播放| 一区二区精品视频在线观看| 欧美videossex极品| 久久久久亚洲AV成人无在 | 国产精品久久久久久久久久尿| 国产一区二区日韩| 国产午夜一区二区| 国产亚洲综合久久| 日韩最新av在线| 尤物yw午夜国产精品视频| 亚洲视频在线视频| 欧美巨乳美女视频| 97国产在线视频| 成人国产在线视频| 亚洲最大成人网色| 欧美不卡福利| www.国产在线视频| 免费av网址在线| 午夜视频在线免费看| 成人乱码一区二区三区av| 91av手机在线| 青青操免费在线视频| 中文字幕av影视| 污视频在线免费观看| 成人va在线观看| 亚洲国产欧美在线人成| 538在线一区二区精品国产| 亚洲区中文字幕| 国色天香2019中文字幕在线观看| 国产成人一区二区| 亚洲综合日韩中文字幕v在线| 五月天久久综合网| 原创真实夫妻啪啪av| 久久久久久久福利| 国产露脸无套对白在线播放| 精品亚洲porn| 亚洲欧美日韩在线不卡| 欧美一区二区三区免费在线看| 日韩专区中文字幕| 精品日韩美女| 免费一区二区三区在线观看| 久久久久久视频| 日本vs亚洲vs韩国一区三区 | 国产伦精品一区二区三区视频女| 91高清免费看| 美女一区二区三区在线观看| 亚洲日本丝袜连裤袜办公室| 精品久久久久久久久久久久包黑料| 午夜精品福利在线观看| 尤物国产精品| 国产在线综合视频| 丝袜诱惑亚洲看片| 午夜欧美一区二区三区在线播放| 中文字幕欧美专区| 亚洲精品成人自拍| 国产在线免费看| 国产主播一区二区三区| 6080yy午夜一二三区久久| 亚洲一区二区三区777| 欧美视频亚洲图片| 天天色棕合合合合合合合| 色婷婷综合久久久中文一区二区| 国产91精品久| 国内精品国产三级国产aⅴ久| 熟妇人妻一区二区三区四区| 色播五月激情综合网| 国产精品久久久久久久久久尿| 亚洲欧美在线精品| 日韩av不卡在线观看| 日韩欧美激情在线| 久久天天东北熟女毛茸茸| 国产精品久久777777换脸| 国产又大又长又粗| 国产调教视频一区| 欧美一区二区三区艳史| 日本美女视频一区| 国产精品高清无码| 亚洲午夜在线视频| 国产精品久久久对白| 我家有个日本女人| 亚洲精品免费播放| 成人动漫在线观看视频| 日韩精品一区二区三| 欧美日韩国产麻豆| 免费成人av网站| 艳妇乳肉豪妇荡乳av无码福利| 欧美性生交xxxxx久久久| 免费av一区二区三区| 中文字幕视频免费观看| 精品国产三级a在线观看| 国产一区二区三区小说| 久久精品日产第一区二区| 中文字幕无线精品亚洲乱码一区 | 91av在线视频观看| 999精品久久久| 欧美日韩精品国产| 99热亚洲精品| 国产福利电影一区二区三区| 成人www视频在线观看| 日本少妇在线观看| 日韩成人在线视频| 在线精品一区二区三区| 一区二区三区在线播放| 91麻豆天美传媒在线| 国产伦精品一区二区三区免费迷 | 欧美日韩国产色视频| 无码粉嫩虎白一线天在线观看 | 88久久精品无码一区二区毛片| 国产精品美女视频| 高清无码一区二区在线观看吞精| 成 人 黄 色 片 在线播放 | 国产日韩欧美高清在线| 性欧美videosex高清少妇| 国产精品一区二区三区网站| 国产精品污www一区二区三区| 人人妻人人澡人人爽人人欧美一区| 欧美日韩成人在线观看| 国产第100页| 国产69精品99久久久久久宅男| 波多野结衣电车| 国产精品444| 久久资源在线| 久久精品人成| 成人av免费观看| 隔壁人妻偷人bd中字| 亚洲欧美日韩在线| 亚洲无吗一区二区三区| 色94色欧美sute亚洲线路一久| 成年女人免费视频| 亚洲视频视频在线| 91精品视频免费在线观看| 国产成人jvid在线播放| 捆绑紧缚一区二区三区视频 | 69堂国产成人免费视频| 97在线观看免费高| 热99精品里视频精品| 久久精品国产亚洲一区二区三区| 岛国视频一区免费观看| 久久久影院官网| 丰满岳乱妇一区二区| 中文字幕成人精品久久不卡| 国产丰满美女做爰| 性刺激综合网| 欧美日韩国产在线观看| 日本在线播放视频| 精品久久久久久乱码天堂| 成人免费一区二区三区在线观看| 无码人妻一区二区三区一| 久久精品国产成人| 国产专区综合网| 我要看一级黄色大片| 久久九九全国免费精品观看| 久久一区精品| 久久精品国产露脸对白| 久久色免费在线视频| 国产.欧美.日韩| 你懂得在线视频| 国产精品com| 国产精品毛片久久久久久| 五月激情四射婷婷| 精品在线不卡| 精品国产乱码久久久久久浪潮 | 国产精欧美一区二区三区白种人| 中文字幕亚洲欧美在线| 懂色一区二区三区免费观看| av网站有哪些| 九九九久久久| 精品国产一区二区三区久久影院| 久久视频一区| 国产aⅴ激情无码久久久无码| www.久久久| 精品少妇一区二区三区在线播放 | 亚洲久久久久久| 亚洲a∨日韩av高清在线观看| 色狠狠一区二区三区香蕉| 国产永久免费视频| 亚洲一区二区图片| 国产欧美日韩精品丝袜高跟鞋| 欧美日韩性生活视频| 日韩黄色小视频| 无码国产69精品久久久久同性| 久久精品magnetxturnbtih| 亚洲色在线视频| 日本一区二区不卡视频| 无码人妻精品一区二区50| 色一情一乱一伦一区二区三区日本| 久久久久久久999精品视频| 色国产综合视频| 懂色av一区二区三区蜜臀| 日本在线观看视频网站| 久久久亚洲精品无码| 亚洲自拍偷拍一区| 久久国产精品99国产精| 色综合久久久久综合体| 大胆亚洲人体视频| www.五月婷| 1级黄色大片儿| 天天躁日日躁狠狠躁免费麻豆| 亚洲一区二区三区涩| 国产女人18毛片水18精品| www.久久色.com| 欧美一区二区三区的| 亚洲va中文字幕| 欧美极品美女视频| 国产一区视频导航| 人妻与黑人一区二区三区| 免费黄色网址在线| 午夜爽爽爽男女免费观看| 亚洲精品国产成人av在线| 毛片一区二区三区四区| 中文字幕乱码免费| 久久影视中文粉嫩av| 91精品国产高清久久久久久91裸体| 久久久久亚洲精品国产| 精品国产拍在线观看| 欧美精品一区二区在线播放| 欧美日韩精品是欧美日韩精品| 一区二区三区四区中文字幕| 国产精品视频九色porn| 91丨九色丨黑人外教| 粉嫩蜜臀av国产精品网站| 免费高清不卡av| 秋霞午夜鲁丝一区二区老狼| 免费看黄色一级视频| 国内精品国产成人国产三级| 国产一级免费视频| 日韩在线视频不卡| 国产精品热久久| 日本免费一区视频| 日本成人在线一区| 国产精品一区一区三区| 国产成人精品1024| 成人精品免费看| 2021中文字幕一区亚洲| 中文字幕视频一区| 欧美性色xo影院| 日韩女优电影在线观看| 亚洲国产欧美日韩精品| 日韩在线视频免费观看| 欧美福利视频在线观看| 欧美专区第一页| 91网免费观看| 麻豆精品视频| 国产超级av在线| 五月天六月丁香| 国产日产精品一区二区三区的介绍| 圆产精品久久久久久久久久久| 丰满人妻av一区二区三区| 蜜臀久久久99精品久久久久久| av亚洲精华国产精华| 亚洲成人精品影院| 日韩精品久久久久久久玫瑰园| 欧美高清视频在线| 欧美日韩大片一区二区三区| youjizzxxxx18| 欧美一区二区三区不卡视频| 精品无码三级在线观看视频| 一区二区三区欧美日| 国产一区二区三区丝袜| 成人在线观看网址| 天美一区二区三区| 全部毛片永久免费看| 成人午夜精品一区二区三区| 在线看日本不卡| 国产精品一区二区性色av | 欧美亚洲在线观看| 国产一区二区视频播放| 欧美精品99久久久| 老色鬼精品视频在线观看播放| 欧美性猛交xxxx富婆| 欧美一级大片在线免费观看| 搞av.com| 国产精品熟女视频| 国产精品久久网站| 九九九久久久久久| 久久久久免费精品| 国产又粗又猛又黄又爽| 日本高清不卡在线观看|