亭亭五月天在线观看,亭亭五月天在线观看,国产最新av一区二区,国产 高清 中文字幕,99re热久久亚洲综合精品成人,熟妇 一区二区三区,一级做a爰片性色毛片武则天,美女的骚穴视频播放,国产美女午夜免费视频

24小時(shí)熱門版塊排行榜    

查看: 1117  |  回復(fù): 3

zyj8119

木蟲 (著名寫手)

[交流] 【轉(zhuǎn)帖】Delphi中的線程類 已有1人參與

Delphi中的線程類--之(1)
Delphi中的線程類--之(1)    Raptor(原作)   
   
關(guān)鍵字     Thread Event CriticalSection Synchronize  
   
Delphi中的線程類

猛禽[Mental Studio]

http://mental.mentsu.com

( 之一)

Delphi中有一個(gè)線程類TThread是用來(lái)實(shí)現(xiàn)多線程編程的,這個(gè)絕大多數(shù)Delphi書藉都有說(shuō)到,但基本上都是對(duì)TThread類的幾個(gè)成員作一簡(jiǎn)單介紹,再說(shuō)明一下Execute的實(shí)現(xiàn)和Synchronize的用法就完了。然而這并不是多線程編程的全部,我寫此文的目的在于對(duì)此作一個(gè)補(bǔ)充。

線程本質(zhì)上是進(jìn)程中一段并發(fā)運(yùn)行的代碼。一個(gè)進(jìn)程至少有一個(gè)線程,即所謂的主線程。同時(shí)還可以有多個(gè)子線程。當(dāng)一個(gè)進(jìn)程中用到超過(guò)一個(gè)線程時(shí),就是所謂的“多線程”。

那么這個(gè)所謂的“一段代碼”是如何定義的呢?其實(shí)就是一個(gè)函數(shù)或過(guò)程(對(duì)Delphi而言)。

如果用Windows API來(lái)創(chuàng)建線程的話,是通過(guò)一個(gè)叫做CreateThread的API函數(shù)來(lái)實(shí)現(xiàn)的,它的定義為:

HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes,  
    DWORD dwStackSize,  
    LPTHREAD_START_ROUTINE lpStartAddress,  
    LPVOID lpParameter,  
    DWORD dwCreationFlags,  
    LPDWORD lpThreadId  
   );

其各參數(shù)如它們的名稱所說(shuō),分別是:線程屬性(用于在NT下進(jìn)行線程的安全屬性設(shè)置,在9X下無(wú)效),堆棧大小,起始地址,參數(shù),創(chuàng)建標(biāo)志(用于設(shè)置線程創(chuàng)建時(shí)的狀態(tài)),線程ID,最后返回線程Handle。其中的起始地址就是線程函數(shù)的入口,直至線程函數(shù)結(jié)束,線程也就結(jié)束了。
整個(gè)線程的執(zhí)行過(guò)程如下圖:
此主題相關(guān)圖片如下:

因?yàn)镃reateThread參數(shù)很多,而且是Windows的API,所以在C Runtime Library里提供了一個(gè)通用的線程函數(shù)(理論上可以在任何支持線程的OS中使用):

unsigned long _beginthread(void (_USERENTRY *__start)(void *), unsigned __stksize, void *__arg);

Delphi也提供了一個(gè)相同功能的類似函數(shù):

function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord; ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord; var ThreadId: LongWord): Integer;

這三個(gè)函數(shù)的功能是基本相同的,它們都是將線程函數(shù)中的代碼放到一個(gè)獨(dú)立的線程中執(zhí)行。線程函數(shù)與一般函數(shù)的最大不同在于,線程函數(shù)一啟動(dòng),這三個(gè)線程啟動(dòng)函數(shù)就返回了,主線程繼續(xù)向下執(zhí)行,而線程函數(shù)在一個(gè)獨(dú)立的線程中執(zhí)行,它要執(zhí)行多久,什么時(shí)候返回,主線程是不管也不知道的。

正常情況下,線程函數(shù)返回后,線程就終止了。但也有其它方式:

Windows API:


VOID ExitThread( DWORD dwExitCode );
C Runtime Library:


void _endthread(void);



Delphi Runtime Library:

procedure EndThread(ExitCode: Integer);

為了記錄一些必要的線程數(shù)據(jù)(狀態(tài)/屬性等),OS會(huì)為線程創(chuàng)建一個(gè)內(nèi)部Object,如在Windows中那個(gè)Handle便是這個(gè)內(nèi)部Object的Handle,所以在線程結(jié)束的時(shí)候還應(yīng)該釋放這個(gè)Object。

  

雖然說(shuō)用API或RTL(Runtime Library)已經(jīng)可以很方便地進(jìn)行多線程編程了,但是還是需要進(jìn)行較多的細(xì)節(jié)處理,為此Delphi在Classes單元中對(duì)線程作了一個(gè)較好的封裝,這就是VCL的線程類:TThread

使用這個(gè)類也很簡(jiǎn)單,大多數(shù)的Delphi書籍都有說(shuō),基本用法是:先從TThread派生一個(gè)自己的線程類(因?yàn)門Thread是一個(gè)抽象類,不能生成實(shí)例),然后是Override抽象方法:Execute(這就是線程函數(shù),也就是在線程中執(zhí)行的代碼部分),如果需要用到可視VCL對(duì)象,還需要通過(guò)Synchronize過(guò)程進(jìn)行。關(guān)于之方面的具體細(xì)節(jié),這里不再贅述,請(qǐng)參考相關(guān)書籍。

本文接下來(lái)要討論的是TThread類是如何對(duì)線程進(jìn)行封裝的,也就是深入研究一下TThread類的實(shí)現(xiàn)。因?yàn)橹皇钦嬲亓私饬怂鸥玫厥褂盟?

下面是DELPHI7中TThread類的聲明(本文只討論在Windows平臺(tái)下的實(shí)現(xiàn),所以去掉了所有有關(guān)Linux平臺(tái)部分的代碼):

  TThread = class
  private
    FHandle: THandle;
    FThreadID: THandle;
    FCreateSuspended: Boolean;
    FTerminated: Boolean;
    FSuspended: Boolean;
    FFreeOnTerminate: Boolean;
    FFinished: Boolean;
    FReturnValue: Integer;
    FOnTerminate: TNotifyEvent;
    FSynchronize: TSynchronizeRecord;
    FFatalException: TObject;
    procedure CallOnTerminate;
    class procedure Synchronize(ASyncRec: PSynchronizeRecord); overload;
    function GetPriority: TThreadPriority;
    procedure SetPriority(Value: TThreadPriority);
    procedure SetSuspended(Value: Boolean);

  protected
    procedure CheckThreadError(ErrCode: Integer); overload;
    procedure CheckThreadError(Success: Boolean); overload;
   procedure DoTerminate; virtual;
    procedure Execute; virtual; abstract;
    procedure Synchronize(Method: TThreadMethod); overload;
    property ReturnValue: Integer read FReturnValue write FReturnValue;
    property Terminated: Boolean read FTerminated;


  public
    constructor Create(CreateSuspended: Boolean);
    destructor Destroy; override;
    procedure AfterConstruction; override;
    procedure Resume;
    procedure Suspend;
    procedure Terminate;
    function WaitFor: LongWord;
    class procedure Synchronize(AThread: TThread; AMethod: TThreadMethod); overload;
    class procedure StaticSynchronize(AThread: TThread; AMethod: TThreadMethod);
    property FatalException: TObject read FFatalException;
    property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate;
    property Handle: THandle read FHandle;
    property Priority: TThreadPriority read GetPriority write SetPriority;
    property Suspended: Boolean read FSuspended write SetSuspended;
    property ThreadID: THandle read FThreadID;
    property OnTerminate: TNotifyEvent read FOnTerminate write FOnTerminate;
  end;

TThread類在Delphi的RTL里算是比較簡(jiǎn)單的類,類成員也不多,類屬性都很簡(jiǎn)單明白,本文將只對(duì)幾個(gè)比較重要的類成員方法和唯一的事件:OnTerminate作詳細(xì)分析。

(待續(xù))
  





Delphi中的線程類--之(2)
Delphi中的線程類--之(2)    Raptor(原作)   
   
關(guān)鍵字     Thread Event CriticalSection Synchronize  
   
Delphi中的線程類

猛禽[Mental Studio]

http://mental.mentsu.com
回復(fù)此樓

» 猜你喜歡

» 本主題相關(guān)價(jià)值貼推薦,對(duì)您同樣有幫助:

好好學(xué)習(xí),天天向上。
已閱   回復(fù)此樓   關(guān)注TA 給TA發(fā)消息 送TA紅花 TA的回帖

zyj8119

木蟲 (著名寫手)

引用回帖:
Originally posted by zyj8119 at 2010-12-02 15:50:37:
Delphi中的線程類--之(1)
Delphi中的線程類--之(1)    Raptor(原作)   
   
關(guān)鍵字     Thread Event CriticalSection Synchronize  
   
Delphi中的線程類

猛禽[Mental Studio]

[url]http:/ ...

之二

首先就是構(gòu)造函數(shù):

constructor TThread.Create(CreateSuspended: Boolean);
begin
  inherited Create;
  AddThread;
  FSuspended := CreateSuspended;
  FCreateSuspended := CreateSuspended;
  FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), CREATE_SUSPENDED, FThreadID);
  if FHandle = 0 then
    raise EThread.CreateResFmt(@SThreadCreateError, [SysErrorMessage(GetLastError)]);
end;

雖然這個(gè)構(gòu)造函數(shù)沒(méi)有多少代碼,但卻可以算是最重要的一個(gè)成員,因?yàn)榫程就是在這里被創(chuàng)建的。

在通過(guò)Inherited調(diào)用TObject.Create后,第一句就是調(diào)用一個(gè)過(guò)程:AddThread,其源碼如下:

procedure AddThread;
begin
  InterlockedIncrement(ThreadCount);
end;

同樣有一個(gè)對(duì)應(yīng)的RemoveThread:
procedure RemoveThread;
begin
  InterlockedDecrement(ThreadCount);
end;

它們的功能很簡(jiǎn)單,就是通過(guò)增減一個(gè)全局變量來(lái)統(tǒng)計(jì)進(jìn)程中的線程數(shù)。只是這里用于增減變量的并不是常用的Inc/Dec過(guò)程,而是用了InterlockedIncrement/InterlockedDecrement這一對(duì)過(guò)程,它們實(shí)現(xiàn)的功能完全一樣,都是對(duì)變量加一或減一。但它們有一個(gè)最大的區(qū)別,那就是InterlockedIncrement/InterlockedDecrement是線程安全的。即它們?cè)诙嗑程下能保證執(zhí)行結(jié)果正確,而Inc/Dec不能;蛘甙床僮飨到y(tǒng)理論中的術(shù)語(yǔ)來(lái)說(shuō),這是一對(duì)“原語(yǔ)”操作。

以加一為例來(lái)說(shuō)明二者實(shí)現(xiàn)細(xì)節(jié)上的不同:

一般來(lái)說(shuō),對(duì)內(nèi)存數(shù)據(jù)加一的操作分解以后有三個(gè)步驟:

1、  從內(nèi)存中讀出數(shù)據(jù)
2、  數(shù)據(jù)加一
3、  存入內(nèi)存



現(xiàn)在假設(shè)在一個(gè)兩個(gè)線程的應(yīng)用中用Inc進(jìn)行加一操作可能出現(xiàn)的一種情況:
1、  線程A從內(nèi)存中讀出數(shù)據(jù)(假設(shè)為3)
2、  線程B從內(nèi)存中讀出數(shù)據(jù)(也是3)
3、  線程A對(duì)數(shù)據(jù)加一(現(xiàn)在是4)
4、  線程B對(duì)數(shù)據(jù)加一(現(xiàn)在也是4)
5、  線程A將數(shù)據(jù)存入內(nèi)存(現(xiàn)在內(nèi)存中的數(shù)據(jù)是4)
6、  線程B也將數(shù)據(jù)存入內(nèi)存(現(xiàn)在內(nèi)存中的數(shù)據(jù)還是4,但兩個(gè)線程都對(duì)它加了一,應(yīng)該是5才對(duì),所以這里出現(xiàn)了錯(cuò)誤的結(jié)果)

而用InterlockIncrement過(guò)程則沒(méi)有這個(gè)問(wèn)題,因?yàn)樗^“原語(yǔ)”是一種不可中斷的操作,即操作系統(tǒng)能保證在一個(gè)“原語(yǔ)”執(zhí)行完畢前不會(huì)進(jìn)行線程切換。所以在上面那個(gè)例子中,只有當(dāng)線程A執(zhí)行完將數(shù)據(jù)存入內(nèi)存后,線程B才可以開(kāi)始從中取數(shù)并進(jìn)行加一操作,這樣就保證了即使是在多線程情況下,結(jié)果也一定會(huì)是正確的。

前面那個(gè)例子也說(shuō)明一種“線程訪問(wèn)沖突”的情況,這也就是為什么線程之間需要“同步”(Synchronize),關(guān)于這個(gè),在后面說(shuō)到同步時(shí)還會(huì)再詳細(xì)討論。

說(shuō)到同步,有一個(gè)題外話:加拿大滑鐵盧大學(xué)的教授李明曾就Synchronize一詞在“線程同步”中被譯作“同步”提出過(guò)異議,個(gè)人認(rèn)為他說(shuō)的其實(shí)很有道理。在中文中“同步”的意思是“同時(shí)發(fā)生”,而“線程同步”目的就是避免這種“同時(shí)發(fā)生”的事情。而在英文中,Synchronize的意思有兩個(gè):一個(gè)是傳統(tǒng)意義上的同步(To occur at the same time),另一個(gè)是“協(xié)調(diào)一致”(To operate in unison)。在“線程同步”中的Synchronize一詞應(yīng)該是指后面一種意思,即“保證多個(gè)線程在訪問(wèn)同一數(shù)據(jù)時(shí),保持協(xié)調(diào)一致,避免出錯(cuò)”。不過(guò)像這樣譯得不準(zhǔn)的詞在IT業(yè)還有很多,既然已經(jīng)是約定俗成了,本文也將繼續(xù)沿用,只是在這里說(shuō)明一下,因?yàn)檐浖_(kāi)發(fā)是一項(xiàng)細(xì)致的工作,該弄清楚的,絕不能含糊。

扯遠(yuǎn)了,回到TThread的構(gòu)造函數(shù)上,接下來(lái)最重要就是這句了:

FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), CREATE_SUSPENDED, FThreadID);

這里就用到了前面說(shuō)到的Delphi RTL函數(shù)BeginThread,它有很多參數(shù),關(guān)鍵的是第三、四兩個(gè)參數(shù)。第三個(gè)參數(shù)就是前面說(shuō)到的線程函數(shù),即在線程中執(zhí)行的代碼部分。第四個(gè)參數(shù)則是傳遞給線程函數(shù)的參數(shù),在這里就是創(chuàng)建的線程對(duì)象(即Self)。其它的參數(shù)中,第五個(gè)是用于設(shè)置線程在創(chuàng)建后即掛起,不立即執(zhí)行(啟動(dòng)線程的工作是在AfterConstruction中根據(jù)CreateSuspended標(biāo)志來(lái)決定的),第六個(gè)是返回線程ID。

現(xiàn)在來(lái)看TThread的核心:線程函數(shù)ThreadProc。有意思的是這個(gè)線程類的核心卻不是線程的成員,而是一個(gè)全局函數(shù)(因?yàn)锽eginThread過(guò)程的參數(shù)約定只能用全局函數(shù))。下面是它的代碼:

function ThreadProc(Thread: TThread): Integer;
var
  FreeThread: Boolean;
begin
  try
    if not Thread.Terminated then
    try
      Thread.Execute;
    except
      Thread.FFatalException := AcquireExceptionObject;
    end;
  finally
    FreeThread := Thread.FFreeOnTerminate;
    Result := Thread.FReturnValue;
    Thread.DoTerminate;
    Thread.FFinished := True;
    SignalSyncEvent;
    if FreeThread then Thread.Free;
    EndThread(Result);
  end;
end;

雖然也沒(méi)有多少代碼,但卻是整個(gè)TThread中最重要的部分,因?yàn)檫@段代碼是真正在線程中執(zhí)行的代碼。下面對(duì)代碼作逐行說(shuō)明:

首先判斷線程類的Terminated標(biāo)志,如果未被標(biāo)志為終止,則調(diào)用線程類的Execute方法執(zhí)行線程代碼,因?yàn)門Thread是抽象類,Execute方法是抽象方法,所以本質(zhì)上是執(zhí)行派生類中的Execute代碼。

所以說(shuō),Execute就是線程類中的線程函數(shù),所有在Execute中的代碼都需要當(dāng)作線程代碼來(lái)考慮,如防止訪問(wèn)沖突等。

如果Execute發(fā)生異常,則通過(guò)AcquireExceptionObject取得異常對(duì)象,并存入線程類的FFatalException成員中。

最后是線程結(jié)束前做的一些收尾工作。局部變量FreeThread記錄了線程類的FreeOnTerminated屬性的設(shè)置,然后將線程返回值設(shè)置為線程類的返回值屬性的值。然后執(zhí)行線程類的DoTerminate方法。

DoTerminate方法的代碼如下:
procedure TThread.DoTerminate;
begin
  if Assigned(FOnTerminate) then Synchronize(CallOnTerminate);
end;


很簡(jiǎn)單,就是通過(guò)Synchronize來(lái)調(diào)用CallOnTerminate方法,而CallOnTerminate方法的代碼如下,就是簡(jiǎn)單地調(diào)用OnTerminate事件:

procedure TThread.CallOnTerminate;
begin
  if Assigned(FOnTerminate) then FOnTerminate(Self);
end;

因?yàn)镺nTerminate事件是在Synchronize中執(zhí)行的,所以本質(zhì)上它并不是線程代碼,而是主線程代碼(具體見(jiàn)后面對(duì)Synchronize的分析)。

執(zhí)行完OnTerminate后,將線程類的FFinished標(biāo)志設(shè)置為True。

接下來(lái)執(zhí)行SignalSyncEvent過(guò)程,其代碼如下:

procedure SignalSyncEvent;
begin
  SetEvent(SyncEvent);
end;

也很簡(jiǎn)單,就是設(shè)置一下一個(gè)全局Event:SyncEvent,關(guān)于Event的使用,本文將在后文詳述,而SyncEvent的用途將在WaitFor過(guò)程中說(shuō)明。

然后根據(jù)FreeThread中保存的FreeOnTerminate設(shè)置決定是否釋放線程類,在線程類釋放時(shí),還有一些些操作,詳見(jiàn)接下來(lái)的析構(gòu)函數(shù)實(shí)現(xiàn)。

最后調(diào)用EndThread結(jié)束線程,返回線程返回值。

至此,線程完全結(jié)束。

(待續(xù))





Delphi中的線程類--之(3)
Delphi中的線程類--之(3)    Raptor(原作)   
   
關(guān)鍵字     Thread Event CriticalSection Synchronize  
   
Delphi中的線程類


猛禽[Mental Studio]

http://mental.mentsu.com

之三

說(shuō)完構(gòu)造函數(shù),再來(lái)看析構(gòu)函數(shù):

destructor TThread.Destroy;
begin
  if (FThreadID <> 0) and not FFinished then
  begin
    Terminate;
    if FCreateSuspended then
      Resume;
    WaitFor;
  end;

  if FHandle <> 0 then CloseHandle(FHandle);
  inherited Destroy;
  FFatalException.Free;
  RemoveThread;
end;

在線程對(duì)象被釋放前,首先要檢查線程是否還在執(zhí)行中,如果線程還在執(zhí)行中(線程ID不為0,并且線程結(jié)束標(biāo)志未設(shè)置),則調(diào)用Terminate過(guò)程結(jié)束線程。Terminate過(guò)程只是簡(jiǎn)單地設(shè)置線程類的Terminated標(biāo)志,如下面的代碼:

procedure TThread.Terminate;
begin
  FTerminated := True;
end;

所以線程仍然必須繼續(xù)執(zhí)行到正常結(jié)束后才行,而不是立即終止線程,這一點(diǎn)要注意。

在這里說(shuō)一點(diǎn)題外話:很多人都問(wèn)過(guò)我,如何才能“立即”終止線程(當(dāng)然是指用TThread創(chuàng)建的線程)。結(jié)果當(dāng)然是不行!終止線程的唯一辦法就是讓Execute方法執(zhí)行完畢,所以一般來(lái)說(shuō),要讓你的線程能夠盡快終止,必須在Execute方法中在較短的時(shí)間內(nèi)不斷地檢查Terminated標(biāo)志,以便能及時(shí)地退出。這是設(shè)計(jì)線程代碼的一個(gè)很重要的原則!

當(dāng)然如果你一定要能“立即”退出線程,那么TThread類不是一個(gè)好的選擇,因?yàn)槿绻肁PI強(qiáng)制終止線程的話,最終會(huì)導(dǎo)致TThread線程對(duì)象不能被正確釋放,在對(duì)象析構(gòu)時(shí)出現(xiàn)Access Violation。這種情況你只能用API或RTL函數(shù)來(lái)創(chuàng)建線程。

如果線程處于啟動(dòng)掛起狀態(tài),則將線程轉(zhuǎn)入運(yùn)行狀態(tài),然后調(diào)用WaitFor進(jìn)行等待,其功能就是等待到線程結(jié)束后才繼續(xù)向下執(zhí)行。關(guān)于WaitFor的實(shí)現(xiàn),將放到后面說(shuō)明。

線程結(jié)束后,關(guān)閉線程Handle(正常線程創(chuàng)建的情況下Handle都是存在的),釋放操作系統(tǒng)創(chuàng)建的線程對(duì)象。

然后調(diào)用TObject.Destroy釋放本對(duì)象,并釋放已經(jīng)捕獲的異常對(duì)象,最后調(diào)用RemoveThread減小進(jìn)程的線程數(shù)。

其它關(guān)于Suspend/Resume及線程優(yōu)先級(jí)設(shè)置等方面,不是本文的重點(diǎn),不再贅述。下面要討論的是本文的另兩個(gè)重點(diǎn):Synchronize和WaitFor。

但是在介紹這兩個(gè)函數(shù)之前,需要先介紹另外兩個(gè)線程同步技術(shù):事件和臨界區(qū)。

事件(Event)與Delphi中的事件有所不同。從本質(zhì)上說(shuō),Event其實(shí)相當(dāng)于一個(gè)全局的布爾變量。它有兩個(gè)賦值操作:Set和Reset,相當(dāng)于把它設(shè)置為True或False。而檢查它的值是通過(guò)WaitFor操作進(jìn)行。對(duì)應(yīng)在Windows平臺(tái)上,是三個(gè)API函數(shù):SetEvent、ResetEvent、WaitForSingleObject(實(shí)現(xiàn)WaitFor功能的API還有幾個(gè),這是最簡(jiǎn)單的一個(gè))。

這三個(gè)都是原語(yǔ),所以Event可以實(shí)現(xiàn)一般布爾變量不能實(shí)現(xiàn)的在多線程中的應(yīng)用。Set和Reset的功能前面已經(jīng)說(shuō)過(guò)了,現(xiàn)在來(lái)說(shuō)一下WaitFor的功能:

WaitFor的功能是檢查Event的狀態(tài)是否是Set狀態(tài)(相當(dāng)于True),如果是則立即返回,如果不是,則等待它變?yōu)镾et狀態(tài),在等待期間,調(diào)用WaitFor的線程處于掛起狀態(tài)。另外WaitFor有一個(gè)參數(shù)用于超時(shí)設(shè)置,如果此參數(shù)為0,則不等待,立即返回Event的狀態(tài),如果是INFINITE則無(wú)限等待,直到Set狀態(tài)發(fā)生,若是一個(gè)有限的數(shù)值,則等待相應(yīng)的毫秒數(shù)后返回Event的狀態(tài)。

當(dāng)Event從Reset狀態(tài)向Set狀態(tài)轉(zhuǎn)換時(shí),喚醒其它由于WaitFor這個(gè)Event而掛起的線程,這就是它為什么叫Event的原因。所謂“事件”就是指“狀態(tài)的轉(zhuǎn)換”。通過(guò)Event可以在線程間傳遞這種“狀態(tài)轉(zhuǎn)換”信息。

當(dāng)然用一個(gè)受保護(hù)(見(jiàn)下面的臨界區(qū)介紹)的布爾變量也能實(shí)現(xiàn)類似的功能,只要用一個(gè)循環(huán)檢查此布爾值的代碼來(lái)代替WaitFor即可。從功能上說(shuō)完全沒(méi)有問(wèn)題,但實(shí)際使用中就會(huì)發(fā)現(xiàn),這樣的等待會(huì)占用大量的CPU資源,降低系統(tǒng)性能,影響到別的線程的執(zhí)行速度,所以是不經(jīng)濟(jì)的,有的時(shí)候甚至可能會(huì)有問(wèn)題。所以不建議這樣用。

(待續(xù))



Delphi中的線程類--之(4)
Delphi中的線程類--之(4)    Raptor(原作)   
   
關(guān)鍵字     Thread Event CriticalSection Synchronize  
   
Delphi中的線程類

猛禽[Mental Studio]

http://mental.mentsu.com

之四

臨界區(qū)(CriticalSection)則是一項(xiàng)共享數(shù)據(jù)訪問(wèn)保護(hù)的技術(shù)。它其實(shí)也是相當(dāng)于一個(gè)全局的布爾變量。但對(duì)它的操作有所不同,它只有兩個(gè)操作:Enter和Leave,同樣可以把它的兩個(gè)狀態(tài)當(dāng)作True和False,分別表示現(xiàn)在是否處于臨界區(qū)中。這兩個(gè)操作也是原語(yǔ),所以它可以用于在多線程應(yīng)用中保護(hù)共享數(shù)據(jù),防止訪問(wèn)沖突。

用臨界區(qū)保護(hù)共享數(shù)據(jù)的方法很簡(jiǎn)單:在每次要訪問(wèn)共享數(shù)據(jù)之前調(diào)用Enter設(shè)置進(jìn)入臨界區(qū)標(biāo)志,然后再操作數(shù)據(jù),最后調(diào)用Leave離開(kāi)臨界區(qū)。它的保護(hù)原理是這樣的:當(dāng)一個(gè)線程進(jìn)入臨界區(qū)后,如果此時(shí)另一個(gè)線程也要訪問(wèn)這個(gè)數(shù)據(jù),則它會(huì)在調(diào)用Enter時(shí),發(fā)現(xiàn)已經(jīng)有線程進(jìn)入臨界區(qū),然后此線程就會(huì)被掛起,等待當(dāng)前在臨界區(qū)的線程調(diào)用Leave離開(kāi)臨界區(qū),當(dāng)另一個(gè)線程完成操作,調(diào)用Leave離開(kāi)后,此線程就會(huì)被喚醒,并設(shè)置臨界區(qū)標(biāo)志,開(kāi)始操作數(shù)據(jù),這樣就防止了訪問(wèn)沖突。
好好學(xué)習(xí),天天向上。
2樓2010-12-02 15:51:28
已閱   回復(fù)此樓   關(guān)注TA 給TA發(fā)消息 送TA紅花 TA的回帖

zyj8119

木蟲 (著名寫手)

引用回帖:
Originally posted by zyj8119 at 2010-12-02 15:51:28:

之二

首先就是構(gòu)造函數(shù):

constructor TThread.Create(CreateSuspended: Boolean);
begin
  inherited Create;
  AddThread;
  FSuspended := CreateSuspended;
  FCreateSuspended := Creat ...

以前面那個(gè)InterlockedIncrement為例,我們用CriticalSection(Windows API)來(lái)實(shí)現(xiàn)它:

Var
  InterlockedCrit : TRTLCriticalSection;

Procedure InterlockedIncrement( var aValue : Integer );
Begin
  EnterCriticalSection( InterlockedCrit );
  Inc( aValue );
  LeaveCriticalSection( InterlockedCrit );
End;

現(xiàn)在再來(lái)看前面那個(gè)例子:

1.         線程A進(jìn)入臨界區(qū)(假設(shè)數(shù)據(jù)為3)
2.         線程B進(jìn)入臨界區(qū),因?yàn)锳已經(jīng)在臨界區(qū)中,所以B被掛起
3.         線程A對(duì)數(shù)據(jù)加一(現(xiàn)在是4)
4.         線程A離開(kāi)臨界區(qū),喚醒線程B(現(xiàn)在內(nèi)存中的數(shù)據(jù)是4)
5.         線程B被喚醒,對(duì)數(shù)據(jù)加一(現(xiàn)在就是5了)
6.         線程B離開(kāi)臨界區(qū),現(xiàn)在的數(shù)據(jù)就是正確的了。

臨界區(qū)就是這樣保護(hù)共享數(shù)據(jù)的訪問(wèn)。

關(guān)于臨界區(qū)的使用,有一點(diǎn)要注意:即數(shù)據(jù)訪問(wèn)時(shí)的異常情況處理。因?yàn)槿绻跀?shù)據(jù)操作時(shí)發(fā)生異常,將導(dǎo)致Leave操作沒(méi)有被執(zhí)行,結(jié)果將使本應(yīng)被喚醒的線程未被喚醒,可能造成程序的沒(méi)有響應(yīng)。所以一般來(lái)說(shuō),如下面這樣使用臨界區(qū)才是正確的做法:

EnterCriticalSection

Try

   //  操作臨界區(qū)數(shù)據(jù)

Finally
  LeaveCriticalSection
End;

  

最后要說(shuō)明的是,Event和CriticalSection都是操作系統(tǒng)資源,使用前都需要?jiǎng)?chuàng)建,使用完后也同樣需要釋放。如TThread類用到的一個(gè)全局Event:SyncEvent和全局CriticalSection:TheadLock,都是在InitThreadSynchronization和DoneThreadSynchronization中進(jìn)行創(chuàng)建和釋放的,而它們則是在Classes單元的Initialization和Finalization中被調(diào)用的。

由于在TThread中都是用API來(lái)操作Event和CriticalSection的,所以前面都是以API為例,其實(shí)Delphi已經(jīng)提供了對(duì)它們的封裝,在SyncObjs單元中,分別是TEvent類和TCriticalSection類。用法也與前面用API的方法相差無(wú)幾。因?yàn)門Event的構(gòu)造函數(shù)參數(shù)過(guò)多,為了簡(jiǎn)單起見(jiàn),Delphi還提供了一個(gè)用默認(rèn)參數(shù)初始化的Event類:TSimpleEvent。

順便再介紹一下另一個(gè)用于線程同步的類:TMultiReadExclusiveWriteSynchronizer,它是在SysUtils單元中定義的。據(jù)我所知,這是Delphi RTL中定義的最長(zhǎng)的一個(gè)類名,還好它有一個(gè)短的別名:TMREWSync。至于它的用處,我想光看名字就可以知道了,我也就不多說(shuō)了。

有了前面對(duì)Event和CriticalSection的準(zhǔn)備知識(shí),可以正式開(kāi)始討論Synchronize和WaitFor了。

我們知道,Synchronize是通過(guò)將部分代碼放到主線程中執(zhí)行來(lái)實(shí)現(xiàn)線程同步的,因?yàn)樵谝粋(gè)進(jìn)程中,只有一個(gè)主線程。先來(lái)看看Synchronize的實(shí)現(xiàn):

procedure TThread.Synchronize(Method: TThreadMethod);
begin
  FSynchronize.FThread := Self;
  FSynchronize.FSynchronizeException := nil;
  FSynchronize.FMethod := Method;
  Synchronize(@FSynchronize);
end;

其中FSynchronize是一個(gè)記錄類型:

  PSynchronizeRecord = ^TSynchronizeRecord;

  TSynchronizeRecord = record
    FThread: TObject;
    FMethod: TThreadMethod;
    FSynchronizeException: TObject;
  end;

用于進(jìn)行線程和主線程之間進(jìn)行數(shù)據(jù)交換,包括傳入線程類對(duì)象,同步方法及發(fā)生的異常。

在Synchronize中調(diào)用了它的一個(gè)重載版本,而且這個(gè)重載版本比較特別,它是一個(gè)“類方法”。所謂類方法,是一種特殊的類成員方法,它的調(diào)用并不需要?jiǎng)?chuàng)建類實(shí)例,而是像構(gòu)造函數(shù)那樣,通過(guò)類名調(diào)用。之所以會(huì)用類方法來(lái)實(shí)現(xiàn)它,是因?yàn)闉榱丝梢栽诰程對(duì)象沒(méi)有創(chuàng)建時(shí)也能調(diào)用它。不過(guò)實(shí)際中是用它的另一個(gè)重載版本(也是類方法)和另一個(gè)類方法StaticSynchronize。下面是這個(gè)Synchronize的代碼:

class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord);
var
  SyncProc: TSyncProc;
begin

  if GetCurrentThreadID = MainThreadID then
    ASyncRec.FMethod
  else
  begin
    SyncProc.Signal := CreateEvent(nil, True, False, nil);
    try
      EnterCriticalSection(ThreadLock);
      try
        if SyncList = nil then
          SyncList := TList.Create;
        SyncProc.SyncRec := ASyncRec;
        SyncList.Add(@SyncProc);
        SignalSyncEvent;
        if Assigned(WakeMainThread) then
          WakeMainThread(SyncProc.SyncRec.FThread);
        LeaveCriticalSection(ThreadLock);
        try
          WaitForSingleObject(SyncProc.Signal, INFINITE);
        finally
          EnterCriticalSection(ThreadLock);
        end;
      finally
        LeaveCriticalSection(ThreadLock);
      end;
    finally
      CloseHandle(SyncProc.Signal);
    end;
    if Assigned(ASyncRec.FSynchronizeException) then raise ASyncRec.FSynchronizeException;
  end;
end;


這段代碼略多一些,不過(guò)也不算太復(fù)雜。

首先是判斷當(dāng)前線程是否是主線程,如果是,則簡(jiǎn)單地執(zhí)行同步方法后返回。

如果不是主線程,則準(zhǔn)備開(kāi)始同步過(guò)程。

通過(guò)局部變量SyncProc記錄線程交換數(shù)據(jù)(參數(shù))和一個(gè)Event Handle,其記錄結(jié)構(gòu)如下:

  TSyncProc = record
    SyncRec: PSynchronizeRecord;
    Signal: THandle;
  end;

然后創(chuàng)建一個(gè)Event,接著進(jìn)入臨界區(qū)(通過(guò)全局變量ThreadLock進(jìn)行,因?yàn)橥瑫r(shí)只能有一個(gè)線程進(jìn)入Synchronize狀態(tài),所以可以用全局變量記錄),然后就是把這個(gè)記錄數(shù)據(jù)存入SyncList這個(gè)列表中(如果這個(gè)列表不存在的話,則創(chuàng)建它)。可見(jiàn)ThreadLock這個(gè)臨界區(qū)就是為了保護(hù)對(duì)SyncList的訪問(wèn),這一點(diǎn)在后面介紹CheckSynchronize時(shí)會(huì)再次看到。

再接下就是調(diào)用SignalSyncEvent,其代碼在前面介紹TThread的構(gòu)造函數(shù)時(shí)已經(jīng)介紹過(guò)了,它的功能就是簡(jiǎn)單地將SyncEvent作一個(gè)Set的操作。關(guān)于這個(gè)SyncEvent的用途,將在后面介紹WaitFor時(shí)再詳述。

接下來(lái)就是最主要的部分了:調(diào)用WakeMainThread事件進(jìn)行同步操作。WakeMainThread是一個(gè)TNotifyEvent類型的全局事件。這里之所以要用事件進(jìn)行處理,是因?yàn)镾ynchronize方法本質(zhì)上是通過(guò)消息,將需要同步的過(guò)程放到主線程中執(zhí)行,如果在一些沒(méi)有消息循環(huán)的應(yīng)用中(如Console或DLL)是無(wú)法使用的,所以要使用這個(gè)事件進(jìn)行處理。

而響應(yīng)這個(gè)事件的是Application對(duì)象,下面兩個(gè)方法分別用于設(shè)置和清空WakeMainThread事件的響應(yīng)(來(lái)自Forms單元):

procedure TApplication.HookSynchronizeWakeup;
begin
  Classes.WakeMainThread := WakeMainThread;
end;

procedure TApplication.UnhookSynchronizeWakeup;
begin
  Classes.WakeMainThread := nil;
end;

上面兩個(gè)方法分別是在TApplication類的構(gòu)造函數(shù)和析構(gòu)函數(shù)中被調(diào)用。

這就是在Application對(duì)象中WakeMainThread事件響應(yīng)的代碼,消息就是在這里被發(fā)出的,它利用了一個(gè)空消息來(lái)實(shí)現(xiàn):

procedure TApplication.WakeMainThread(Sender: TObject);
begin
  PostMessage(Handle, WM_NULL, 0, 0);
end;

而這個(gè)消息的響應(yīng)也是在Application對(duì)象中,見(jiàn)下面的代碼(刪除無(wú)關(guān)的部分):

procedure TApplication.WndProc(var Message: TMessage);



begin
  try


    with Message do
      case Msg of

        WM_NULL:
          CheckSynchronize;

  except
    HandleException(Self);
  end;
end;

其中的CheckSynchronize也是定義在Classes單元中的,由于它比較復(fù)雜,暫時(shí)不詳細(xì)說(shuō)明,只要知道它是具體處理Synchronize功能的部分就好,現(xiàn)在繼續(xù)分析Synchronize的代碼。

在執(zhí)行完WakeMainThread事件后,就退出臨界區(qū),然后調(diào)用WaitForSingleObject開(kāi)始等待在進(jìn)入臨界區(qū)前創(chuàng)建的那個(gè)Event。這個(gè)Event的功能是等待這個(gè)同步方法的執(zhí)行結(jié)束,關(guān)于這點(diǎn),在后面分析CheckSynchronize時(shí)會(huì)再說(shuō)明。

注意在WaitForSingleObject之后又重新進(jìn)入臨界區(qū),但沒(méi)有做任何事就退出了,似乎沒(méi)有意義,但這是必須的!

因?yàn)榕R界區(qū)的Enter和Leave必須嚴(yán)格的一一對(duì)應(yīng)。那么是否可以改成這樣呢:

        if Assigned(WakeMainThread) then
          WakeMainThread(SyncProc.SyncRec.FThread);
        WaitForSingleObject(SyncProc.Signal, INFINITE);
      finally
        LeaveCriticalSection(ThreadLock);
      end;

上面的代碼和原來(lái)的代碼最大的區(qū)別在于把WaitForSingleObject也納入臨界區(qū)的限制中了。看上去沒(méi)什么影響,還使代碼大大簡(jiǎn)化了,但真的可以嗎?

事實(shí)上是不行!

因?yàn)槲覀冎,在Enter臨界區(qū)后,如果別的線程要再進(jìn)入,則會(huì)被掛起。而WaitFor方法則會(huì)掛起當(dāng)前線程,直到等待別的線程SetEvent后才會(huì)被喚醒。如果改成上面那樣的代碼的話,如果那個(gè)SetEvent的線程也需要進(jìn)入臨界區(qū)的話,死鎖(Deadlock)就發(fā)生了(關(guān)于死鎖的理論,請(qǐng)自行參考操作系統(tǒng)原理方面的資料)。

死鎖是線程同步中最需要注意的方面之一!

最后釋放開(kāi)始時(shí)創(chuàng)建的Event,如果被同步的方法返回異常的話,還會(huì)在這里再次拋出異常。
好好學(xué)習(xí),天天向上。
3樓2010-12-02 15:51:40
已閱   回復(fù)此樓   關(guān)注TA 給TA發(fā)消息 送TA紅花 TA的回帖

zyj8119

木蟲 (著名寫手)

引用回帖:
Originally posted by zyj8119 at 2010-12-02 15:51:40:

以前面那個(gè)InterlockedIncrement為例,我們用CriticalSection(Windows API)來(lái)實(shí)現(xiàn)它:

Var
  InterlockedCrit : TRTLCriticalSection;

Procedure InterlockedIncrement( var aValue : Integer );
...

(待續(xù))



Delphi中的線程類--之(5,大結(jié)局)
Delphi中的線程類--之(5,大結(jié)局)    Raptor(原作)   
   
關(guān)鍵字     Thread Event CriticalSection Synchronize  
   


Delphi中的線程類

猛禽[Mental Studio]

http://mental.mentsu.com

之五(大結(jié)局)

回到前面CheckSynchronize,見(jiàn)下面的代碼:

function CheckSynchronize(Timeout: Integer = 0): Boolean;
var
  SyncProc: PSyncProc;
  LocalSyncList: TList;
begin
  if GetCurrentThreadID <> MainThreadID then
    raise EThread.CreateResFmt(@SCheckSynchronizeError, [GetCurrentThreadID]);
  if Timeout > 0 then
    WaitForSyncEvent(Timeout)
  else
    ResetSyncEvent;
  LocalSyncList := nil;
  EnterCriticalSection(ThreadLock);
  try
    Integer(LocalSyncList) := InterlockedExchange(Integer(SyncList), Integer(LocalSyncList));
    try
      Result := (LocalSyncList <> nil) and (LocalSyncList.Count > 0);
      if Result then
      begin
        while LocalSyncList.Count > 0 do
        begin
          SyncProc := LocalSyncList[0];
          LocalSyncList.Delete(0);
          LeaveCriticalSection(ThreadLock);
          try
            try
              SyncProc.SyncRec.FMethod;
            except
              SyncProc.SyncRec.FSynchronizeException := AcquireExceptionObject;
            end;
          finally
            EnterCriticalSection(ThreadLock);
          end;
          SetEvent(SyncProc.signal);
        end;
      end;
    finally
      LocalSyncList.Free;
    end;
  finally
    LeaveCriticalSection(ThreadLock);
  end;
end;

首先,這個(gè)方法必須在主線程中被調(diào)用(如前面通過(guò)消息傳遞到主線程),否則就拋出異常。

接下來(lái)調(diào)用ResetSyncEvent(它與前面SetSyncEvent對(duì)應(yīng)的,之所以不考慮WaitForSyncEvent的情況,是因?yàn)橹挥性贚inux版下才會(huì)調(diào)用帶參數(shù)的CheckSynchronize,Windows版下都是調(diào)用默認(rèn)參數(shù)0的CheckSynchronize)。

現(xiàn)在可以看出SyncList的用途了:它是用于記錄所有未被執(zhí)行的同步方法的。因?yàn)橹骶程只有一個(gè),而子線程可能有很多個(gè),當(dāng)多個(gè)子線程同時(shí)調(diào)用同步方法時(shí),主線程可能一時(shí)無(wú)法處理,所以需要一個(gè)列表來(lái)記錄它們。

在這里用一個(gè)局部變量LocalSyncList來(lái)交換SyncList,這里用的也是一個(gè)原語(yǔ):InterlockedExchange。同樣,這里也是用臨界區(qū)將對(duì)SyncList的訪問(wèn)保護(hù)起來(lái)。

只要LocalSyncList不為空,則通過(guò)一個(gè)循環(huán)來(lái)依次處理累積的所有同步方法調(diào)用。最后把處理完的LocalSyncList釋放掉,退出臨界區(qū)。

再來(lái)看對(duì)同步方法的處理:首先是從列表中移出(取出并從列表中刪除)第一個(gè)同步方法調(diào)用數(shù)據(jù)。然后退出臨界區(qū)(原因當(dāng)然也是為了防止死鎖)。

接著就是真正的調(diào)用同步方法了。

如果同步方法中出現(xiàn)異常,將被捕獲后存入同步方法數(shù)據(jù)記錄中。

重新進(jìn)入臨界區(qū)后,調(diào)用SetEvent通知調(diào)用線程,同步方法執(zhí)行完成了(詳見(jiàn)前面Synchronize中的WaitForSingleObject調(diào)用)。

至此,整個(gè)Synchronize的實(shí)現(xiàn)介紹完成。

最后來(lái)說(shuō)一下WaitFor,它的功能就是等待線程執(zhí)行結(jié)束。其代碼如下:

function TThread.WaitFor: LongWord;
var
  H: array[0..1] of THandle;
  WaitResult: Cardinal;
  Msg: TMsg;
begin
  H[0] := FHandle;
  if GetCurrentThreadID = MainThreadID then
  begin
    WaitResult := 0;
    H[1] := SyncEvent;
    repeat
      { This prevents a potential deadlock if the background thread
        does a SendMessage to the foreground thread }
      if WaitResult = WAIT_OBJECT_0 + 2 then
        PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE);
      WaitResult := MsgWaitForMultipleObjects(2, H, False, 1000, QS_SENDMESSAGE);
      CheckThreadError(WaitResult <> WAIT_FAILED);
      if WaitResult = WAIT_OBJECT_0 + 1 then
        CheckSynchronize;
    until WaitResult = WAIT_OBJECT_0;
  end else WaitForSingleObject(H[0], INFINITE);
  CheckThreadError(GetExitCodeThread(H[0], Result));
end;

如果不是在主線程中執(zhí)行WaitFor的話,很簡(jiǎn)單,只要調(diào)用WaitForSingleObject等待此線程的Handle為Signaled狀態(tài)即可。

如果是在主線程中執(zhí)行WaitFor則比較麻煩。首先要在Handle數(shù)組中增加一個(gè)SyncEvent,然后循環(huán)等待,直到線程結(jié)束(即MsgWaitForMultipleObjects返回WAIT_OBJECT_0,詳見(jiàn)MSDN中關(guān)于此API的說(shuō)明)。

在循環(huán)等待中作如下處理:如果有消息發(fā)生,則通過(guò)PeekMessage取出此消息(但并不把它從消息循環(huán)中移除),然后調(diào)用MsgWaitForMultipleObjects來(lái)等待線程Handle或SyncEvent出現(xiàn)Signaled狀態(tài),同時(shí)監(jiān)聽(tīng)消息(QS_SENDMESSAGE參數(shù),詳見(jiàn)MSDN中關(guān)于此API的說(shuō)明)?梢园汛薃PI當(dāng)作一個(gè)可以同時(shí)等待多個(gè)Handle的WaitForSingleObject。如果是SyncEvent被SetEvent(返回WAIT_OBJECT_0 + 1),則調(diào)用CheckSynchronize處理同步方法。

為什么在主線程中調(diào)用WaitFor必須用MsgWaitForMultipleObjects,而不能用WaitForSingleObject等待線程結(jié)束呢?因?yàn)榉乐顾梨i。由于在線程函數(shù)Execute中可能調(diào)用Synchronize處理同步方法,而同步方法是在主線程中執(zhí)行的,如果用WaitForSingleObject等待的話,則主線程在這里被掛起,同步方法無(wú)法執(zhí)行,導(dǎo)致線程也被掛起,于是發(fā)生死鎖。

而改用WaitForMultipleObjects則沒(méi)有這個(gè)問(wèn)題。首先,它的第三個(gè)參數(shù)為False,表示只要線程Handle或SyncEvent中只要有一個(gè)Signaled即可使主線程被喚醒,至于加上QS_SENDMESSAGE是因?yàn)镾ynchronize是通過(guò)消息傳到主線程來(lái)的,所以還要防止消息被阻塞。這樣,當(dāng)線程中調(diào)用Synchronize時(shí),主線程就會(huì)被喚醒并處理同步調(diào)用,在調(diào)用完成后繼續(xù)進(jìn)入掛起等待狀態(tài),直到線程結(jié)束。

至此,對(duì)線程類TThread的分析可以告一個(gè)段落了,對(duì)前面的分析作一個(gè)總結(jié):

1、  線程類的線程必須按正常的方式結(jié)束,即Execute執(zhí)行結(jié)束,所以在其中的代碼中必須在適當(dāng)?shù)牡胤郊尤胱銐蚨嗟膶?duì)Terminated標(biāo)志的判斷,并及時(shí)退出。如果必須要“立即”退出,則不能使用線程類,而要改用API或RTL函數(shù)。
2、  對(duì)可視VCL的訪問(wèn)要放在Synchronize中,通過(guò)消息傳遞到主線程中,由主線程處理。
3、  線程共享數(shù)據(jù)的訪問(wèn)應(yīng)該用臨界區(qū)進(jìn)行保護(hù)(當(dāng)然用Synchronize也行)。
4、  線程通信可以采用Event進(jìn)行(當(dāng)然也可以用Suspend/Resume)。
5、  當(dāng)在多線程應(yīng)用中使用多種線程同步方式時(shí),一定要小心防止出現(xiàn)死鎖。
6、  等待線程結(jié)束要用WaitFor方法。
好好學(xué)習(xí),天天向上。
4樓2010-12-02 15:52:01
已閱   回復(fù)此樓   關(guān)注TA 給TA發(fā)消息 送TA紅花 TA的回帖
相關(guān)版塊跳轉(zhuǎn) 我要訂閱樓主 zyj8119 的主題更新
最具人氣熱帖推薦 [查看全部] 作者 回/看 最后發(fā)表
[考研] 311求調(diào)劑 +12 冬十三 2026-03-15 13/650 2026-03-21 19:07 by ColorlessPI
[考研] 311求調(diào)劑 +7 26研0 2026-03-15 7/350 2026-03-21 19:06 by ColorlessPI
[考研] 材料求調(diào)劑 +4 @taotao 2026-03-21 4/200 2026-03-21 18:52 by 學(xué)員8dgXkO
[考研] 化學(xué)調(diào)劑 +4 yzysaa 2026-03-21 4/200 2026-03-21 18:35 by 學(xué)員8dgXkO
[考研] 311求調(diào)劑 +3 勇敢的小吳 2026-03-20 3/150 2026-03-21 17:40 by ColorlessPI
[考研] 313求調(diào)劑 +4 肆叁貳壹22 2026-03-19 4/200 2026-03-21 17:33 by ColorlessPI
[考研] 307求調(diào)劑 +3 余意卿 2026-03-18 3/150 2026-03-21 17:31 by ColorlessPI
[考研] 310求調(diào)劑 +3 baibai1314 2026-03-16 3/150 2026-03-21 03:56 by JourneyLucky
[考研] 一志愿天津大學(xué)化學(xué)工藝專業(yè)(081702)315分求調(diào)劑 +12 yangfz 2026-03-17 12/600 2026-03-21 03:30 by JourneyLucky
[考研] 一志愿中國(guó)石油大學(xué)(華東) 本科齊魯工業(yè)大學(xué) +3 石能偉 2026-03-17 3/150 2026-03-21 02:22 by JourneyLucky
[考研] 085700資源與環(huán)境308求調(diào)劑 +12 墨墨漠 2026-03-18 13/650 2026-03-21 01:42 by JourneyLucky
[考研] 304求調(diào)劑 +6 曼殊2266 2026-03-18 6/300 2026-03-21 00:32 by JourneyLucky
[考研] 330求調(diào)劑 +4 小材化本科 2026-03-18 4/200 2026-03-20 23:13 by JourneyLucky
[考研] 一志愿南京理工大學(xué)085701資源與環(huán)境302分求調(diào)劑 +4 葵梓衛(wèi)隊(duì) 2026-03-18 6/300 2026-03-20 23:02 by JourneyLucky
[考研] 295復(fù)試調(diào)劑 +8 簡(jiǎn)木ChuFront 2026-03-19 8/400 2026-03-20 20:44 by zhukairuo
[考研] 295材料求調(diào)劑,一志愿武漢理工085601專碩 +5 Charlieyq 2026-03-19 5/250 2026-03-20 20:35 by JourneyLucky
[考研] 環(huán)境工程調(diào)劑 +9 大可digkids 2026-03-16 9/450 2026-03-20 17:38 by 醉在風(fēng)里
[考研] 320求調(diào)劑0856 +3 不想起名字112 2026-03-19 3/150 2026-03-19 22:53 by 學(xué)員8dgXkO
[考研] 一志愿211 0703方向310分求調(diào)劑 +3 努力奮斗112 2026-03-15 3/150 2026-03-16 16:44 by houyaoxu
[考研] 318求調(diào)劑 +3 Yanyali 2026-03-15 3/150 2026-03-16 16:41 by houyaoxu
信息提示
請(qǐng)?zhí)钐幚硪庖?jiàn)
四虎精品久久免费最新| 精品国产无乱码一区二区三区| 首页欧美日韩中文字幕| 久久久久久a女人处女| 偷拍欧美日韩另类图片| 欧美一级特黄大片做受99| 福利小视频免费在线| 亚洲一区二区精品在线播放| 黑人大巨屌操美女逼| 国产在线观看一区二区三区四区| 68视频在线免费观看| 欧美黄色一区二区三区视频| 久久久久久高清一区| 美女网站福利在线观看| 97精品视频,全部免费| 乱子伦国产一区二区三区| 欧洲成熟女人色惰片| 老司国产精品视频免费观看| 久久人妻人人草人人爽| 美女福利网站在线播放| 亚洲图片另类综合小说| 亚洲中文字幕在线av| 一区二区三区四区影片| 日韩成人在线电影首页| 国产视频成人自拍蝌蚪视频| 中文字幕精品人妻久久久久| 日韩人妻中文字幕区| 在线免费观看a视频免费| 久久久久久高清一区| 亚洲午夜精品一级毛片app| 亚洲中文字幕最新地址| 欧美最新一区二区三区| 亚洲字幕一区二区夜色av| 色欲AV亚洲AV无码精品| 中文人妻av一区二区三区| 夜夜操天天干夜夜操| 国产伦理二区三区在干嘛呢| 日韩久久不卡免费视频| 国产资源在线观看二区| 亚洲熟妇在线视频观看| 中文字幕在线观看亚洲情色| 精产国品一二三77777| 亚洲av综合av一去二区三区| 久久视频 在线播放| 亚洲免费午夜污福利| 中文字字幕在线精品乱码| 亚洲国产日韩精品在线| 亚洲 自拍 激情 另类| 亚洲欧美韩国日本一区二区| 午夜一区二区三区视频在线观看| 美女网站福利在线观看| 手机看片1024精品国产| 天天夜夜久久精品综合| 人妻激情偷乱一区二区三区av| 亚洲情色777中文字幕| 2018中文字字幕人妻| 久久人人爽人人爽人人av东京热| 久久久久久久精品乱码| 妈妈的朋友中字在线免费观看| 9662av在线视频| 亚洲美女色www色| 人妻被强av系列一区二区| 亚洲熟妇在线视频观看| 一区二区三区高清视频3| av在线男人的天堂亚洲| 91精品久久久久久久99蜜月 | 在线观看视频免费一区二区三区| 最新日韩av电影在线播放| 又爽又粗又猛又色又黄视频| 91 精品视频在线看| 久久一级片三上悠亚| 大乳丰满人妻中文字幕韩国hd| 亚洲成人自拍图片网站| 精品人妻 色中文熟女 oo| 鸡巴插进美女的嫩小穴视频| 日本人妻少妇xxxxxxx| 欧美日本国产一区二区| 精品国产污污污免费入口| 漂亮人妻口爆久久精品| 3344永久在线观看视频下载| 鸡巴在里面福利视频在线观看| 亚洲成人三级黄色片| 男生用大肌巴操美女骚穴| 美女福利网站在线播放| 天天弄天天草天天日天天| 日本成年视频在线免费观看| 成年人免费福利在线| 欧美一区二区三区爽爽| 91香蕉国产亚洲一二三区| 日本熟妇乱妇熟色视频| 亚洲妹妹我爱你在线观看| 5566熟女人妻人妻| av 一区二区三区 熟女| 最新国产精品综合网高清| 日本黄色一级电影网址| 国产最新av在线免费观看| 天天操天天日天天碰| 两个人在一起靠逼啊啊啊| 最新国产午夜激情视频| 涩涩黄片在线免费观看| 干逼又爽又黄又免费的视频| 国产女主播在线观看一区| 蜜乳视频一区二区三区| 裸日本资源在线午夜| 狠狠干狠狠操免费视频| 日本黄色一级电影网址| 爱搞视频在线观看视频91| 欧美日韩亚洲tv不卡久久| 污网址在线观看视频| 99久久99九九九99九| 九十九步都是爱最后一步是尊严| 国产精品视频网站污污污| 免费看日韩黄视频在线观看| 中文字幕欧美一区二区视频| 五月婷婷激情视频网| 少妇被粗大的猛进69视频| iga肾三级算严重吗| 91久久久精品成人国产| 丰满少妇_区二区三区| 亚洲激情噜噜噜久久久| 4日日夜夜精品视频免费| 亚洲第一区av中文字幕| 国产激情一区二区视频| 日本福利片在线播放| 欧美精品999不卡| 欧美情色av在线观看| 亚洲av中文无码网站| 天堂av国产av伦理av| 亚洲熟女少妇中文字幕系列| 丰满少妇人妻一区二区三区蜜桃| av男人站在线观看| 另类欧美激情校园春色| 色丁香久久激情综合网| 亚洲美女黄色福利视频网站大全| 大陆中文字幕视频在线| 成人做爰av在线观看网站| 欧美性感美女热舞视频| 91国产精品乱码久久久久久| 开心激情五月天作爱片| 午夜8050免费小说| 亚洲天堂男人的天堂| 羞羞漫画无限免费观看秋蝉| 国产亚洲综合5388| 日产国产欧美精品另类| 在线 激情 亚洲 视频| 91大神在线免费观看视频| 欧美黑人性猛交小矮人| 在线观看中文字幕精品av| 91福利高清在线播放| 亚洲AV无码一二三四区在线播放| 成年人黄色日本视频| 中文字幕 中文字幕 亚洲| 上床啪啪啪免费视频| 一区二区三区不卡免费视频网站| 国产极品气质外围av| 玖玖资源站在线观看亚洲| 中日韩又粗又硬又大精品| 亚洲美女色www色| 99亚偷拍自图区亚洲| 欧美一区二区播放视频| 九九热在线精品播放| 38av一区二区三区| 亚洲午夜国产末满十八岁勿进网站| 92午夜免费福利视频www| 婷婷色综合五月天视频| 国产精品蝌蚪自拍视频| 日本老熟老熟妇七十路| 人人人妻人人人妻精品少妇| av天堂新资源在线| 亚洲成人自拍av在线| 日本黄色一级电影网址| 在线免费观看视频18| 欧美猛少妇色ⅹⅹⅹⅹⅹ猛叫| 亚洲中文字幕在线av| 成人做爰av在线观看网站| 中出小骚货在线观看| 欧美黑人性猛交小矮人| 99精品久久精品一区二区| 超碰在线观看97资源| 东北老女人熟女啪啪视频| 日本东京热最新中文字幕| 色999日韩偷自拍拍免费| 自拍偷自拍亚洲精品10p| tushy一区二区三区视频| 欧美一级特黄大片做受99| 日日夜夜免费视频精品| 青青操天堂在线观看视频| 天天干天天操天天要| 少妇精品视频一区二区免费看| 亚洲精品中文字幕手机在线免费看| 97cao在线视频| 另类欧美激情校园春色| 欧美日韩福利视频网| 亚洲一区视频中文字幕在线播放 | 丰满人妻被猛烈进入中文字幕| 大香蕉伊人97在线| 美女福利视频一区二区三区四区| 亚洲欧美成人激情在线| 亚洲熟女少妇中文字幕系列| av 一区二区三区 熟女| 人妻色综合aaaaaa网| 高潮喷水一区二区三区| 欧美肥妇久久久久久| 4438全国成人免费视频| 强乱人妻中文字幕日本| 亚洲国产日韩a在线欧美| 亚洲理论在线a中文字幕97| 色999日韩偷自拍拍免费| 伊人久久综合国产精品| 福利在线国产小视频| 男人的天堂aⅴ在线| 国产人妻熟女ⅹxx丝袜| 中文字幕 首页 人妻| 91香蕉国产亚洲一二三区 | 天天插天天干天天狠| 黄色av日韩在线观看| 92午夜免费福利视频www| 色欲天天媓色媓香视频综合网| 亚洲成人动漫av在线| 开心五月综合激情婷婷| 55夜色66夜色亚洲精品| 51精品视频在线免费观看| 人妻少妇视频系列视频在线| 精品高潮呻吟久久av| 欧美区一区二区三视频| 自拍偷拍 亚洲性图 欧美另类| 国产美女主播av在线| 日本五六十路熟女视频| 中文字幕观看中文字幕免费 | 欧美日韩成人高清中文网| 91精品国产成人久久久久久| 正在播放麻豆精品一区二区| 在线免费观看欧美小视频| 天天想要天天操天天干| 污视频在线观看地址| 欧美日韩亚洲tv不卡久久| 日本黄色一级电影网址| 亚洲中文字幕最新地址| 午夜美女福利视频在线| 五十岁熟女高潮喷水| 国产视频成人自拍蝌蚪视频| 久久99精品热在线观看| 国产女人18毛片水真多精选| 无码精品黑人一区二区老人| 91色哟哟视频在线观看| 91精品夜夜夜一区二区蜜桃| 综合激情网,激情五月| 青青草原在线播放日韩| 国产自拍偷拍在线精品| 伊人精品久久一区二区| 中文字幕在线字幕乱码怎么设置| 亚洲熟妇在线视频观看| 全国熟妇精品一区二区免费视频| 国产亚洲综合5388| 女生裸体视频免费网站| 久久热在线免费观看| 亚洲人妻系列在线视频| 中文字幕国产一区在线视频| 最新激情中文字幕视频| 国产漂亮白嫩美女在线图片 | 欧美在线视频不卡一区| 欧美精品激情在线不卡| 91久久久精品成人国产| 高清av在线婷一区二区色日韩| 青青免费观看视频| 最新久久这里只有精品| 国产天堂av不卡网| 亚洲熟女在线免费观看| 大成色亚洲一二三区| 韩日一级人添人人澡人人妻精品| 中文字幕熟女人妻丝袜丝在线| 福利视频导航在线观看| 韩国毛片w妈妈的朋友7| 天天干天天弄天天日| 亚洲国内精品久久久久久久| 天天插天天透天天爽| 男女啪啪啪啪91av日韩| 久久人人爽人人爽人人av东京热| 国产精品无码无卡免费观| 日本老女人日比视频| 天天色 天天操 天天好逼| 成年人黄色日本视频| 色狠狠色综合久久久绯色| 快色视频在线观看免费| 日日夜夜免费视频精品| 国产中年夫妇激情高潮| 蜜臀一区二区日韩美女少妇视频| 国长拍拍视频免费孕妇| 91精品综合久久久久久五月天| 2026天天操天天干| 91超碰九色porny| 91青青青国产免费高清| 天堂av国产av伦理av| 手机看片福利一区二区三区四区| 黑人大巨屌操美女逼| 69xx精品久久久久| 91亚洲精品久久蜜桃| 天天碰天天摸天天搞 | 人妻女侠被擒受辱记| 亚洲av在线免费播放| 加勒比不卡在线视频| 天天干天天色综合久久| 极品少妇高潮喷水日出白浆| 在线人成视频免费观看尤物| 亚洲一区二区精品三区视频| 亚洲一区二区在线激情| 国产激情免费在线视频| 中文人妻av一区二区三区| 99久9在线视频播放| 亚洲熟女人妻自拍在线视频| 91大神在线免费观看视频| 亚洲色大WWW永久网站| 午夜精品老牛av一区二区三区| 九九九九九久久久国产| 999久久久人妻精品一区 | 污网址在线观看视频| www,日韩av,com| 91精品夜夜夜一区二区蜜桃| 亚洲一区二区精品在线播放| 手机看电影一区二区三区| 午夜国产精品免费视频| 亚洲美女午夜激情视频在线观看| 青青操久久综合激情| 亚洲av网站一区二区三区| 午夜免费福利老司机| 九九热在线精品播放| 天堂av在线最新地址| 亚洲精品1卡2卡3卡| 亚洲一区二区三区四区入口| 黄色av网址在线播放| 日本少妇三级交换做爰做| 亚洲美女午夜激情视频在线观看| 中文字幕 人妻 熟女| 日本a级2020在线观看| 青青免费观看视频| 丝袜美腿日韩av一区| avtt中文字幕手机版| 男人的天堂av中文字幕| 国产剧情av在线免费观看| 亚洲熟妇丰满多毛xxxx网站| 亚洲激情视频在线观看免费| 有码一区二区三区四区五区| 福利在线国产小视频| 在线中文字幕人妻av| 日本五六十路熟女视频| 亚洲一区视频中文字幕在线播放 | 国产,亚洲,欧美综合| 久草视频在线看免费| 99久久国语露脸国产精品| 福利视频导航在线观看| 黄版视频在线免费观看| 女人扒开逼让男人操| 亚洲一区在线视频观看地址| 人妻熟女 亚洲 一页二页| 在线观看中文字幕精品av | 日韩美精品成人一区二区三区四区| 国产福利一区二区三区在线观看| 中文字幕一区二区三区久久久| 在线观看中文字幕精品av| 最新中文字幕久久久久| 大成色亚洲一二三区| 高潮喷水在线视频观看| 18福利视频在线观看| 天天操,天天射,天天爽| 久草视频在线视频在线视频| 99热99这里免费的精品| 精品人妻人人做人人爽| 精久久久久久久久久久久| 一二区二区不卡视频| 国产伦理二区三区在干嘛呢| 青青青青青爽视频在线| 国产精品网站亚洲发布| 免费高清av一区二区| 国产精品久久久久精品三级18| 日本有码精品一区二区三区| 97视频538在线观看| 五月天男人的天堂中文字幕| 啪啪啪网站免费看视频| 免费在线小视频你懂的| 最新国产午夜激情视频| 核xp工厂精品久久亚洲| 亚洲成人,国产精品| 国际精品熟女一区二区| 日本欧美亚洲国产啊啊啊| 瑟瑟干视频在线观看| 正在播放麻豆精品一区二区| 国内销魂老女人老泬| 国产又粗又长又大视频| 99久久久久久久久久久久久| 漂亮人妻口爆久久精品| 国产高清在线观看av| 午夜精品久久久久久久久久蜜桃| 区一区二区三免费观看视频| 亚洲日本欧美韩国另类综合| 人妻女侠被擒受辱记| 最新日韩中文字幕免费在线观看| 福利视频导航在线观看| 大鸡扒操大逼大片免费关看| 亚洲宅男噜噜噜66在线观看| 精产国品一二三77777| 自拍偷拍亚洲综合第一页| 最新国产精品综合网高清| 天海翼亚洲一区在线观看| 婷婷六月天在线视频| 不卡高清一区二区三区| 手机看电影一区二区三区| 亚洲国产精品自产拍在线观看| 69久久夜色精品国产69乱电影| 最新国产精品综合网高清| 国产夫妻视频在线观看免费| 国产激情一区二区视频| av在线播放观看h| 国产女主播在线观看一区| 亚洲精品乱码久久久久app | 日本一区二区三区区别| 夏目彩春av在线看| avtt中文字幕手机版| 老司国产精品视频免费观看| 亚洲乱码av一区二区蜜桃av| 视频在线+欧美十亚洲曰本 | 天天爱天天日天天爽| 亚洲国产精品老女人久久 | 五十岁熟女高潮喷水| 亚洲av综合av一去二区三区| 亚洲美女午夜激情视频在线观看| 久久免费视频ww一区| avtt中文字幕手机版| 男人和女人的逼视频| 亚洲国产中文字幕在线看| 天天透天天舔天天操| 天天操天天干天天谢| 欧美vr专区日韩vr专区| 亚洲综合首页综合在线观看| 久久久精品人妻无码专区不卡| 国内自拍第一区二区三区| 鸡巴在里面福利视频在线观看| 99精品视频在线在线观看| 九一精品人妻一区二区三区| 性感美女人妻久久久| 亚洲精品国产99999| 精品久久久久久久久久久久久| 综合激情网,激情五月| 五月天男人的天堂中文字幕| 国产一区二区手机在线观看| 91佛爷视频在线观看| 亚洲中文字幕在线视频观看二区 | 久久久亚洲熟女一区二区| 日本五六十路熟女视频| 亚洲欧美激情国产综合久久久| 国产白丝一区二区三区av| 亚洲天堂色综合久久| 日本少妇熟女乱码一区二区| 大尺度av毛片在线网址| 亚洲国产精品一区51动漫| 九九热在线精品播放| 欧美插插插插插插| caopeng97在线观看视频| 亚洲av毛片一区二区三区网| 在线视频国产精品欧美| 欧洲精品在线免费观看| 色哟哟亚洲乱码国产乱码精品精| 青青在线免费手机播放视频| 亚洲熟女在线免费观看| 欧美不卡一二三区精品| 男人的天堂av中文字幕| 亚洲成人自拍av在线| 黑鸡巴肏少妇逼视频| 东北老女人熟女啪啪视频| 人妻免费视频黄片在线视频| 欧美色区国产日韩亚洲区| 国产人妻777人伦精品hd超碰 | 美国十次了亚洲天堂网国产| 日韩国产欧美久久一区| 欧美一区二区三区爽爽| 国产精品无码无卡免费观| 97视频人人爱麻豆| 亚洲韩精品一区二区三区| 91精品视频在线观看视频| 亚欧洲乱码视频一二三区| 亚洲精品国品乱码久久久久 | 日本韩国欧美在线视频| 亚洲永远av在线播放| 国产福利三级在线观看| 亚洲成人五月婷婷久久综合 | 日本少妇人妻中文在线| 开心激情五月天作爱片| 97香蕉久久国产超碰| 亚洲美女黄色福利视频网站大全| 色欲天天媓色媓香视频综合网| 最近中文字幕免费视频一| 伊人久久综合国产精品| 汤姆提醒30秒中转进站口| 亚洲天堂色综合久久| 美女张开腿给男人桶爽的软件| 欧美色区国产日韩亚洲区| 视频免费在线观看网站| 亚洲永远av在线播放| 色丁香久久激情综合网| —区二区三区女厕偷拍| 九九六视频,这里只有精品 | 天天综合久久无人区| 50熟妇一区二区三区| 一区二区三区四区影片| 国产自拍偷拍在线精品| 亚洲图片另类综合小说| 国产激情一区二区视频| 青娱乐不卡视频在线| 日韩久久不卡免费视频| 美女福利网站在线播放| 欧美视频亚洲视频在线| 五月天天堂视频在线| 亚洲国产日韩欧美一区二区三区,| 黑人巨大精品一区二区在线| 久久内射天天玩天天懂色| 美女黄色啊啊啊啊视频| 人人人妻人人人妻精品少妇| 中文字幕日本一二三区| 国产青青青青草免费在线视频| 亚洲成人动漫av在线| 亚洲一区二区在线激情| 60路70路日本熟妇| 老司机免费视频福利0| 精产国品一二三产品区别91| 男人资源站中文字幕| 亚洲一区二区三区国产精品电影| 911美女片黄在线观看| 91美女在线观看视频| 人妻少妇精品二三区| 中文人妻av一区二区三区| 91国产精品乱码久久久久久| 91香蕉国产亚洲一二三区| 99精品视频在线在线观看| 狠狠操深爱婷婷综合一区| 久久久久国产精品二区| 亚洲一区二区中文字幕久久| 亚洲自拍偷拍一区二区中文字幕| 日韩男女视频网站在线观看| 在线中文字幕人妻av| 人妻中文字幕亚洲在线| 日本少妇精品免费视频| 果冻麻豆一区二区三区| 日本高清 中文字幕| 99久久人人爽亚洲精品美女| 国产资源网站在线播放| 2021国产剧情麻豆| 美女福利网站在线播放| 视频在线 一区二区| 一区二区三区免费版在线| 亚洲乱码国产乱码精品精视频| av在线免费在线观看| 天天夜夜久久精品综合| 伊人久久综合国产精品| 小妹妹爱大棒棒免费观看视频| 国产一区两区三区福利小视频| 美女福利网站在线播放| 51vv精品视频在线观看| 综合激情网,激情五月| 国产视频成人一区二区| 欧美黄色一区二区三区视频| 亚洲乱码国产乱码精品精视频| 亚洲午夜国产末满十八岁勿进网站| 亚洲一区视频中文字幕在线播放| 成人av中文字幕在线看| 中国精品人妻一区二区| 黄色大片一级老太太操逼| 国产熟妇色xxⅹ交白浆视频| 日本成年视频在线免费观看| aa福利影视在线观看| av激情四射五月婷婷| 久草久热这里只有精品| 全球高清中文字幕av| 在线观看黄页网站视频网站| 国际精品熟女一区二区| 午夜久久久久欠久久久久| 亚洲一区二区精品在线播放| 青青青国产精品视频| 北野中文字幕一区二区| 美女激情久久久久久久| 亚洲欧美不卡专业视频| 午夜在线观看一级毛| 国产美女视频带a∨黄色片| 人妻少妇精品二三区| 5566熟女人妻人妻| 福利在线国产小视频| 亚洲av网站一区二区三区| 核xp工厂精品久久亚洲| 午夜在线成人免费电影| 亚洲另类欧美综合久久| 久久久亚洲熟女一区二区| 国产激情一区二区视频| 成人午夜高清福利视频| 国产91九色视频在线观看| 亚洲一区二区三区国产精品电影| av资源中文字幕在线观看| 大乳丰满人妻中文字幕韩国hd| 欧美日本亚欧在线观看| 51精品视频在线免费观看| 色视频在线播放免费观看| 天天日天天玩天天摸| 人妻中文字幕亚洲在线| 老熟女xxxⅹhd老熟女性| 中文字幕免费啪啪啪| 开心五月综合激情婷婷| 国产原创一区二区三区在线播放| 欧美丝袜亚洲国产日韩| 九九视频在线观看全部| 50熟妇一区二区三区| 国产做A爱免费视频在线观看| 国产91精品福利系列| 美国男的操女孩的小嫩逼| 性感人妻 中文字幕| julia人妻av一区二区三区| 老司国产精品视频免费观看| 成年人免费福利在线| 欧美第一激情综合网欧美激情| 天天插天天干天天狠| 国产精品剧情av在线播放| 欧美日本在线免费视频| 欧美日本在线免费视频| 国产中文亚洲熟女日韩| 伊人综合在线视频免费观看| 亚洲成a人片777777张柏芝| 大秀成年人国产精品视频| 亚洲av激情综合网| 国产精品乱码高清在线观看h| 白白色在线免费视频发布视频 | 女生裸体视频免费网站| 69精品人妻久久久久久久久久久 | 亚洲av日韩久久网站| 青青青免费手机视频在线观看| 成年人黄色日本视频| 综合久久伊人久久88| 熟女一区二区三区综合| 中文字幕福利视频在线一区| 久久一级片三上悠亚| 69国产在线视频网站| 国产高清视频www夜色资源| 亚洲色视频在线播放网站| 大尺度av毛片在线网址| 先锋人妻啪啪中文字幕| 男女插鸡巴视频软件| 91污污在线观看视频| 视频免费在线观看网站| 亚洲男人的天堂最新网址| 欧美精品乱码99久久蜜桃免费| 大乳人妻一区二区三区| 韩国在线播放一区二区三区 | 中文字幕日韩首页欧美在线激情| 亚洲欧美国产一本综合首页| 亚洲美女a级黄色在线播放| 92麻豆一区二区三区| 日韩欧美中文字幕老司机三分钟 | 天天综合久久无人区| 午夜精品小视频在线播放| 夜色福利视频免费观看| 得得爱在线视频观看| 裸日本资源在线午夜| 亚洲成a人片777777张柏芝| 69精品互换人妻4p| 日韩最近中文在线观看| 亚洲中文字幕在线视频观看二区 | 午夜宅男电影av网站| 人妻在线中文视频视频| 亚成区一区二区人妻熟女| 日本欧美亚洲国产啊啊啊| 精品人妻在线激情视频| 少妇熟女天堂网av| 一区二区三区高清视频3| 国产熟女五十路一区二区三区| 最新中文字幕久久久久| 骚穴被阴茎插免费视频| 午夜偷拍的视频久久久免费大全| 开心激情五月天作爱片| 欧美日韩久久丝袜在线| 亚洲最强的25个城市| 欧美操大黑鸡巴视频在线观看| 亚洲av综合av一去二区三区| 国际精品熟女一区二区| 亚洲激情视频在线观看免费| 男女啪啪啪网站在线观看免费| 午夜精品视频免费观看| v天堂国产精品久久| 亚洲男人天堂最新网址大全| 琪琪日本福利伦理视频| 国产极品气质外围av| 第一福利视频在线观看| 日韩精品欧美一区二区| 亚洲欧美国产人成在线| 亚洲男人天堂最新网址大全| 亚洲成a人77777| 亚洲精品激情视频在线观看 | 一区二区三区四区 在线播放| 人妻少妇精品二三区| 久草久热这里只有精品| 99久久免费播放在线观看视频| 日韩av水蜜桃一区二区三区| 超碰在线观看97资源| 日本一区二区三区区别| 4日日夜夜精品视频免费| 日本韩国福利在线播放| 亚洲妹妹我爱你在线观看| 欧美啪啪一区二区三区| 51精品视频在线免费观看| 91精品夜夜夜一区二区蜜桃| 全彩漫画口工18禁| 欧美一级特黄大片在线| 91精品国产成人久久久久久| 91精品资源在线观看| 亚洲天堂男人的天堂| 亚洲国产日韩精品在线| 91九色尤物无套内射| 国产成人av在线你懂得| 天天插天天干天天狠| 天天爱天天日天天爽| 视频自拍偷拍视频自拍| 欧美男女一区二区三区| 自拍偷拍亚洲综合第一页| 五月天天堂视频在线| 亚洲日本欧美韩国另类综合| 最新国产精品综合网高清| 熟妇高潮久久久久久久| 裸日本资源在线午夜| 极品内射老女人操逼视频| 亚洲国产日韩a在线欧美| 亚洲av手机免费在线| 亚洲天堂色综合久久| 亚洲乱熟女一区二区三区山| 中文字幕久久久国产| 松本菜奈实最新av在线 | 女生裸体视频免费网站 | 神马午夜久久电影网| 中文字幕中文字幕在线中…一区| 午夜五十路久久福利| 日本高清在线观看不卡视频| 亚洲a区在线免费观看| 成人18禁高潮片免费日本| 在线 制服 中文字幕 日韩| 中文在线字幕免费观看日韩视频| 荣立三等功退休有什么待遇| 色屁屁一区二区三区在线观看| 欧美男女一区二区三区| 日本少妇熟女乱码一区二区| 精品国产污污污污免费观看| 天天干天天操天天日天天日| 51精品视频在线免费观看| 日本少妇熟女乱码一区二区| 欧美成人少妇人妻精品| 亚洲成a人77777| 91精品久久久久久久99蜜月| 国产毛片特级Av片| 亚洲一区二区三区无码在线| 美女扒开逼逼给你看| 久久精品国产亚洲av清纯| 港台美女明星av天堂| 亚洲制服丝袜美腿在线| 日本不卡视频一二三区| 91精品在线视频免费视频| 精品免费一区二区三区四区视频| 亚洲午夜熟女在线观看| 一区二区三区不卡免费视频网站| 亚洲激情噜噜噜久久久| 五月婷婷伊人久久中文字幕| 韩国在线播放一区二区三区| 最新中文字幕久久久久| 亚洲综合色一区二区三区| 美国伦理片午夜理论片| 日韩无码国产一区二区| 男人和女人的逼视频| 国产又粗又长又大视频| 欧美男女一区二区三区| 日本亚洲精品视频在线观看| 99久久免费播放在线观看视频| 性色蜜桃臀x88av天美传媒| 强乱人妻中文字幕日本| 加勒比不卡在线视频| 91佛爷视频在线观看| 中文字幕 中文字幕 亚洲| 亚洲欧美激情久久久| 夜色17s精品人妻熟女av| 日本欧美视频在线免费| 青青青免费手机视频在线观看| 操死你美女在线视频| 韩国资源视频一区二区三区| 亚洲资源在线免费观看| 欧美熟女xx00视频| 最近最新欧美日韩精品| 亚洲av手机免费在线| 日韩av熟妇在线观看| 亚洲国产精品一区51动漫| 日本少妇三级交换做爰做| 两个人在一起靠逼啊啊啊| 九九热精品视频在线播放| 韩国毛片w妈妈的朋友7| 久久精品四虎夜夜拍拍拍| 天堂一区二区三区在线等| 午夜92福利1000| 中文字幕欧美一区二区视频| 天天操天天日天天碰| av人摸人人人澡人人超碰小说| 亚洲理论在线a中文字幕97| 精品国产污污污免费入口| 中文字幕观看中文字幕免费| 亚洲精品色图1234| 四虎精品久久免费最新| 丰满人妻被猛烈进入中文字幕| 亚洲 自拍 激情 另类| 日韩三级精品电影久久久久| 911精产国品一二三产区区| 鸡巴插进美女的嫩小穴视频| 在线播放 日韩 av| 午夜野花视频在线观看| 免费中文字幕a级激情| 中文人妻av一区二区三区| 亚洲熟女一区二区六区| 中文字幕日韩人妻在线三区| av在线男人的天堂亚洲| 夫妻黄色一级性生活片| 91人妻人人爽色啊啊啊| 91亚洲国产成人久久精品| 人妻人妻在线视频网站| 亚洲在线观看中文字幕av| 亚洲AV无码久久精品国产一区老 | 狠狠操狠狠操狠狠插| 黑鸡巴肏少妇逼视频| 色狠狠色综合久久久绯色| 农村大炕有肉大屁股熟妇| 欧美亚洲另类精品第一页 | 日本熟妇乱妇熟色视频| 都市激情校园春色 亚洲| 欧美操大黑鸡巴视频在线观看| 91系列视频在线播放| 福利视频导航在线观看| 鸡巴在里面福利视频在线观看| 91九色91在线视频| 青青草一个释放的网站| 午夜福利片无码10000| 麻豆出品视频在线观看| 欧美丝袜亚洲国产日韩| 美女把腿张开给男的捅| 成人免费电影二区三区 | 午夜宅男电影av网站| xxxx69在线观看视频| 一区二区三区午夜福利在线| 人妻色综合aaaaaa网| 狠狠干狠狠操免费视频| 成年人黄色日本视频| 亚洲熟女乱色一区二区三区视频| 蜜桃臀少妇白色紧身裤细高跟| julia人妻av一区二区三区| 亚洲天堂男人的天堂| 一区二区三区四区影片| 狂操鸡巴小骚逼视频免费观看| 欧美视频亚洲视频在线| 日韩成人免费观看电影| 午夜精品视频免费观看| 亚洲人妻系列在线视频| 99国产精品久久99久久久| 亚洲一区在线视频观看地址| 午夜精品老牛av一区二区三区| 国产黄色主播网址大全在线播放| 一看就是假奶的av| 自拍偷拍 亚洲性图 欧美另类| 91精品国产成人久久久久久| —区二区三区女厕偷拍| 天天想要天天操天天干| 制服丝袜 中文字幕 日韩| 国产黑色丝袜 在线日韩欧美| 天天干夜夜撸天天操| 天天操天天舔天天爽| 中文字幕在线观看亚洲情色| 熟女人妻精品视频一区| 日本一区二区三区的资源| 北野中文字幕一区二区| 亚洲宅男噜噜噜66在线观看| 久草视频在线视频在线视频| 伊人精品久久一区二区| 91九色国产在线视频| 中国特黄色性生活片| 日韩欧美黄色免费网站| 成人午夜麻豆大胆视频| 美利坚合众国av天堂| 中文字幕欧美一区二区视频| 交换的一天中文字幕在线视频| 新亚洲天堂男子av| 亚洲一区二区在线激情| 亚洲成人激情在线综合| 国内销魂老女人老泬| 成人午夜麻豆大胆视频| 精品一区二区三区喷水内射高潮| 9久re热视频在线精品| 两个奶被揉得又硬又翘怎么回事| 38av一区二区三区| 欧美日本国产一区二区| 国产av高清二区三区| 亚洲一级熟妇丰满的女人| 国产高清视频www夜色资源| 亚洲乱码国产乱码精品精视频 | 亚洲一区二区三区国产精品电影| 亚洲第一成年偷拍视频| 美女网站福利在线观看| 夜夜操天天干夜夜操| 激情久久在线免费观看视频| 亚洲av中文无码网站| 自拍偷拍亚洲综合第一页| 欧美性感美女热舞视频| 亚洲国产精品 久久久| 大乳人妻一区二区三区| 18禁男女啪啪啪无遮挡| 色屁屁一区二区三区在线观看| 一区二区欧美 国产日韩| 69久久夜色精品国产69乱电影| 亚洲中文字幕在线av| 香港日本台湾经典三级| 天天干夜夜操夜夜骑| 午夜一区二区三区视频在线观看| 欧美在线视频不卡一区| 成人免费电影二区三区| 中文字幕 首页 人妻| 人妻系列中文字幕大乳丰满人妻| 女生抠逼自慰啊啊啊啊啊啊啊下载| 欧美精品激情在线不卡| 亚洲午夜国产末满十八岁勿进网站| 国产精品剧情av在线播放| 亚洲经典av中文字幕| 91人妻人人做人人爽高清| 97成人老师在线视频| 日本高清久久人人爽| 美女欧美视频在线观看免费| 亚洲欧美精品海量播放| 亚洲综合色一区二区三区| 久久综合狠狠综合久久综| 91精品久久久久久久99蜜月| 精产国品一二三77777| 亚洲综合在线视频在线播放| 99亚偷拍自图区亚洲| 亚洲一区二区偷拍女厕所| 国产自拍偷拍在线精品| 欧美亚洲精品色图网站| 亚洲欧美韩国日本一区二区| 亚洲韩精品一区二区三区| 午夜8050免费小说| 日本不卡 中文字幕| 中文字幕日韩人妻在线三区| 蜜桃tv一区二区三区| 日本一道中文字幕99| 老司机免费视频福利0| 亚洲一区视频中文字幕在线播放| 少妇被中出一区二区| av大尺度一区二区三区| 人妻系列在线免费视频| 精品国模一区二区三区欧美| 中文字幕人妻精品精品| 成熟了的熟妇毛茸茸| 在线免费观看a视频免费| 亚洲乱熟女一区二区三区影片| 少妇熟女天堂网av| 五月的婷婷综合视频| 性高潮视频在线观看日韩| 果冻麻豆一区二区三区| 男女爱爱好爽视频免费看| 国产高清视频www夜色资源| 亚洲综合色一区二区三区| 制服丝袜 中文字幕 日韩 | 人妻熟女 亚洲 一页二页 | 男女爱爱好爽视频免费看| 夜夜操天天干夜夜操| 欧美一区二区播放视频| 亚洲欧美小说中文字幕| tobu8日本高清| 熟女一区二区三区综合| 午夜偷拍的视频久久久免费大全 | 蜜桃臀av在线一区二区| 日韩精品视频一区二区三区在线| 中国精品人妻一区二区| 中文字幕 中文字幕 亚洲| 好看的日本中文字幕在线观看二区| 2021国产剧情麻豆| 不用付费特黄特色亚洲特级黄色片| 手机看电影一区二区三区| 国产福利三级在线观看| 3344永久在线观看视频下载| 国产亚洲精品啪啪视频| 在线人成视频免费观看尤物| 自拍偷拍 国产激情| 18岁禁一二三区免费体验| 日韩国产欧美一区二区三区粉嫩 | 一二三四区国产在线观看| 男女真人做带声音视频图片| 亚洲最强的25个城市| 不卡高清一区二区三区| 天天透天天舔天天操| 91超精品碰国产在线观看| 欧美不卡一二三区精品| 亚洲乱码国产乱码精品精视频| 人妻激情偷乱一区二区三区av| 国产精品乱码高清在线观看h| 美利坚合众国av天堂| 日韩精品视频一区二区三区在线| 精产国品一二三产品区别97 | 顶级欧美色妇4khd| 黄色片免费国产精品| 92在线播放观看视频| 国产91九色视频在线观看| 青青青青午夜手机国产视频| 亚洲激情噜噜噜久久久| 一看就是假奶的av| 好看的日本中文字幕在线观看二区| 快色视频在线观看免费| 99久久人人爽亚洲精品美女| 国产成人综合久久婷婷| 天天摸天天干夜夜操| 无码人妻丰满熟妇区五路| 超碰在线免费观看视频97| 天天日夜夜操人人爽| 久久99精品热在线观看| 鸡巴插进美女的嫩小穴视频| 老司国产精品视频免费观看| 天天操天天舔天天爽| 黄色片免费网站在线| 亚洲av毛片一区二区三区网| 日本少妇人妻凌辱在线| 日韩久久九九精品视频| 国产美女主播av在线| 亚洲欧美精品海量播放| 99re这里是国产精品首页| 国产福利三级在线观看| 天堂一区二区三区在线等| 欧美区日本区国产区| 68福利精品在线视频| 精品人妻人人做人人爽| 亚洲精品综合欧美精品综合| 欧美日韩不卡视频合集| 欧美aaaa性bbbbaaaa| 91亚洲精品久久蜜桃| 麻豆出品视频在线观看| 中国特黄色性生活片| 欧美成人区一区二区三| 亚洲成a人77777| 亚洲av激情综合网| 日本五六十路熟女视频| 国产激情一区二区视频| 国产高清视频www夜色资源| 91精品国产人妻麻豆| 一二区二区不卡视频| 黄色网络中文字幕日本| 日本黄页在线观看视频| 性高潮视频在线观看日韩| 午夜精品久久久久久久精品乱码| 一区二区欧美 国产日韩| 69xx精品久久久久| 亚洲自拍偷拍一区二区中文字幕 | 日韩人妻一区二区三区在线观看| 国产人妻熟女ⅹxx丝袜| 亚洲国产日韩a在线欧美| 日本老熟老熟妇七十路| 亚洲自拍偷拍av在线| 天堂网免费在线电影| tushy一区二区三区视频| 特级aaaaa黄色片| 亚洲成人欧洲成人在线| 亚洲成a人77777| 中文字幕av特黄毛片| 欧美人与动欧交视频| 亚洲成人五月婷婷久久综合| 久久久久久久岛国免费观看 | 后入日韩翘臀蜜桃臀美女| 91超碰国产在线观看| 中文字幕人妻一区二区视频系列 | 97精品视频,全部免费| 快进来插我的逼嗯啊视频| 亚洲AV无码久久精品国产一区老| 亚洲国产精品 久久久| 三级欧美日韩一区二区三区| 国产精品福利久久久久| av在线观看视频免费| 日本午夜福利免费在线播放| 夜夜爽夜夜操夜夜爱| 女人扒开逼让男人操| 乱子伦国产一区二区三区| av 一区二区三区 熟女| av天堂新资源在线| 欧美巨大另类极品video| 国色天香一二三期区别大象| 少妇被中出一区二区| 欧美日本在线免费视频| 女人的天堂 av在线| 蜜臀久久精品久久久久久av | 99亚偷拍自图区亚洲| 国产激情一区二区视频| 伊人精品久久一区二区| 天天操天天日天天插天天舔| 男女啪啪啪网站在线观看免费| 久久综合狠狠综合久久综| 日本少妇人妻中文在线| 天堂一区二区三区在线等| 中文字幕观看中文字幕免费 | 亚洲国产日韩a在线欧美| 韩国一级片最火爆中文字幕| 在线看的免费网站黄| 亚洲成a人片777777张柏芝| 国产成人深夜福利短视频99| 日韩人妻精品久久久久| 亚洲精品乱码久久久久app| 国产91九色视频在线观看| 中文字幕日本一二三区| 免费绝清毛片a在线播放| 九九六视频,这里只有精品| 99精品久久精品一区二区| 狠狠操深爱婷婷综合一区| 国产自拍偷拍在线精品| 午夜精品久久秘?18免费观看| 午夜美女福利视频在线| 久久午夜免费鲁丝片| 日本亚洲精品视频在线观看| 狠狠操狠狠操狠狠插| 大乳人妻一区二区三区| 福利视频免费在线播放| 亚洲色大WWW永久网站| 综合激情网,激情五月| 久久午夜免费鲁丝片| av在线男人的天堂亚洲| 玖辛奈18禁同人污本子| 自拍偷拍 亚洲性图 欧美另类| 伊人精品久久一区二区| 久久热在线免费观看| 亚洲蜜桃久久久久久| 欧美成人屋影院在线视频观看| 国产av剧变态维修工虐杀美女| 天天曰天天摸天天爽| 女人的天堂av在线网| 99免费观看在线视频| 伊人网在线欧美日韩在线| 久久99久久99久久97的人| 亚洲欧美综合另类最新| 午夜夫妻性生活视频| 国产一级一国产一级毛片 | 伊人网国产在线播放| 熟妇人妻av无码中文字幕| 熟女人妻少妇一区二区| 欧美情色av在线观看| 成人av中文字幕在线看| 公侵犯人妻中文字幕巨| 亚洲欧美成人激情在线| 成人精品影视一区二区| 在线能看视频你懂的| 可以免费观看日韩av| 亚洲最强的25个城市| 欧美极品少妇高潮喷水| 999久久久人妻精品一区 | 九十九步都是爱最后一步是尊严| 手机看片1024精品国产| 亚洲黄色成人一级片| 91激情四射婷婷综合| 日产国产欧美精品另类| 大成色亚洲一二三区| 国产精品久久久久精品三级18| 国产自拍偷拍在线精品| 欧美人与动欧交视频| 午夜8050免费小说| 一区二区三区 国产日韩欧美| 99久久免费播放在线观看视频| 亚洲码av一区二区三区| 神马午夜久久电影网| 2020精品视频在线| 久久久西西gogo日本美女人体| 欧美三区四区在线视频| 国产精品久久久久久成人久| 人妻系列在线免费视频| 欧美猛少妇色ⅹⅹⅹⅹⅹ猛叫| 白白色在线免费视频发布视频| 亚洲18片综合国产av| 国产天堂av不卡网| 国产午夜在线播放视频| 精品国产久久久久午夜精品av| 国产视频成人自拍蝌蚪视频| 可以直接看av网站| 国产亚洲综合5388| 国产成人在线观看hd| 日本少妇丰满大bbb的小乳沟| 麻豆国产91制片厂| 二十四小时日本高清在线观看 | 精久久久久久久久久久久 | avgo成人短视频| 欧美日韩在线观看免费播放| 91偷拍被偷拍在线播放| 裸日本资源在线午夜| 色999日韩偷自拍拍免费| 懂色av之国产精品| 青娱乐免费视频一二三| 免费在线观看亚洲福利| 2020国产成人精品视频| 1级黄色片在线观看| 538欧美在线观看一区二区三区 | 国产福利三级在线观看| 制服丝袜中文字幕熟女人妻 | 60路70路日本熟妇| 日本福利网站一区二区| 91精品国产91久久久久久密臀| 国产人妻777人伦精品hd超碰| 亚州av嫩草av极品在线观看| 国产做A爱免费视频在线观看| 最新久久这里只有精品| 国产成人深夜福利短视频99| 亚洲天堂av最新在线| 成人精品影视一区二区| 亭亭五月天在线观看| 天天日天天干天天日天天干天天 | 绿巨人浩克在线视频观看| 日韩人妻中文字幕二区| 天堂一区二区三区在线等| 国产在线观看av一区| 亚洲精品中文字幕手机在线免费看| 亚洲精品国产99999| 最近最新欧美日韩精品| 欧美黑人1区2区3区| 亚洲gay视频在线观看| 国产漂亮白嫩美女在线图片 | 青青青青午夜手机国产视频| 日本亚洲午夜福利一区二区三区| 大奶熟妇激情操逼逼| 亚洲美女a级黄色在线播放| 91精品国产成人久久久久久| 日韩免费黄色片在线观看| 日韩美精品成人一区二区三区四区| 69国产在线视频网站| 深夜福利免费观看在线看| 天天干夜夜操夜夜骑| 69精品人妻久久久久久久久久久 | 区一区二区三免费观看视频| www国产亚洲精品久久久| 4438全国成人免费视频| 伊人情人成综合视频| 精品人妻在线激情视频| 亚洲中文字幕最新地址| 精品人妻 色中文熟女 oo| 91人妻人人做人人爽高清| 2019年中文字幕在线播放视频| 东京热日韩av在线| 日韩免费黄色片在线观看| 女生裸体视频免费网站 | 亚洲码av一区二区三区| 精品国产污污污免费入口| 成人人妻h在线观看| 男女插鸡巴视频软件| 自拍偷拍亚洲综合第一页| 加勒比东京热绿帽人妻多人操| 91精品夜夜夜一区二区| 视频在线 一区二区| 国产大桥未久一区二区| 亚洲全国精品女人久久久| 极品风骚人妻3p视频| 最新日韩av电影在线播放| 60路70路日本熟妇| 东京热日韩av影片| 自拍偷拍 国产激情| 中文字幕人妻一区二区视频系列 | 国产成人情侣激情视频| 核xp工厂精品久久亚洲| 日韩黄色在线观看网站上 | 人妻少妇精品二三区| 在线有码人妻自拍视频| 欧美性受黑人猛交裸体视频| 中文字幕福利视频第四页| 亚洲综合一区二区三区四区| 老熟女 露脸 嗷嗷叫| 核xp工厂精品久久亚洲| 一区二区三区 国产日韩欧美| 日韩成人精品久久久免费看| 国产igao激情在线视频入口| 在线视频自拍第三页| 99热这里只有精品免费播放| 久久久久国产精品二区| 美女一区二区四区六区八区| 91麻豆精品国产在线| 日韩一级视频一区二区三区| 一区二区欧美 国产日韩| 亚洲国产精品一区二区第二页| 婷婷色九月综合激情丁香| 日本欧美视频在线免费| 丰满少妇人妻一区二区三区蜜桃| 91美女在线观看视频| 911精产国品一二三产区区| 性高潮视频在线观看日韩 | 中国精品人妻一区二区| 99精品久久精品一区二区| 亚洲图片另类综合小说| 亚洲中文字幕最新地址| 亚洲第一页欧美第一页| 91九色尤物无套内射| 亚洲制服丝袜在线看| 欧美成人区一区二区三| 午夜五十路久久福利| 国产农村乱子伦精精品视频| 熟女国内精品一区二区三区| 午夜精品久久秘?18免费观看| 精品高潮呻吟久久av| 99久久精品视频16| 日本少妇三级交换做爰做| 福利美女视频在线观看| 久久综合狠狠综合久久综| 五月天天堂视频在线| av毛片在线观看网址| 亚洲中文字幕无线乱码人妻精品| 天天弄天天草天天日天天| 91色哟哟视频在线观看| 久久久久高潮白浆久久| 日本不卡 中文字幕| 国产极品气质外围av| 狠狠操狠狠操狠狠插| 97超碰人人爽人人做| 香港日本台湾经典三级| 天天碰天天摸天天搞 | 人妻熟女 亚洲 一页二页 | 人人妻人人澡人人爽97| 港台美女明星av天堂| 午夜亚洲国产精品中字| 自拍丝袜国产欧美日韩| 中字幕人妻熟女人妻a62v网| av 一区二区三区 熟女| 国产激情在线观看一区二区三区| 秋霞成人午夜鲁丝一区二区三区| 亚洲人成大片在线观看| 精品欧美黑人一区二区三区| a级黄片免费观看| 国产熟女五十路一区二区三区| 九一精品人妻一区二区三区| 嗯~嗯~啊啊啊~高潮了软件| 亚洲国产美女主播在线观看| 不卡一区二区视频在线| 91污污在线观看视频| 国产精品视频网站污污污| 国产成人深夜福利短视频99| 亚洲日本欧美韩国另类综合| 自拍偷自拍亚洲精品10p| 东京热日韩av影片| 不卡视频在线 欧美日韩| 午夜精品老牛av一区二区三区| 日韩人妻中文字幕二区| 不用付费特黄特色亚洲特级黄色片| 天天天天天天天天干夜夜| 日韩久久不卡免费视频| 成人资源中文在线观看| 国产资源在线观看二区| 交换的一天中文字幕在线视频 | 91色老久久精品偷偷蜜臀| 深夜福利免费观看在线看| 91九色尤物无套内射| 9662av在线视频| 午夜五十路久久福利| 青青国产95免看视频| 亚洲国产综合久久精品| 亚洲精品色图1234| 不卡一二三区别视频| 99女福利女女视频在线播放| 天天操天天日天天插天天舔| 中文字幕亚洲乱码精品无限| 偷拍熟女大胆免费视频| 9420高清视频在线观看国语版| 精品国产污污污免费入口| 人妻系列中文字幕大乳丰满人妻| jizzjizz国产精品传媒| 亚洲欧美日韩中文在线观看| 欧美精品999不卡| 亚洲午夜国产末满十八岁勿进网站| —区二区三区女厕偷拍| 伊人久久综合国产精品| 女同大尺度视频网站在线观看| 超碰在线pro中文字幕| 高清av在线婷一区二区色日韩| 国产福利三级在线观看| 亚洲黄色成人一级片| 夫妻黄色一级性生活片| 加勒比东京热绿帽人妻多人操| 国产精品内射婷婷一级| 熟妇高潮久久久久久久| 中文字幕熟女人妻一区| 四虎国产精品国产精品国产精品 | 日韩国产欧美久久一区| 成人午夜高清福利视频| 亚洲春色av中文字幕| 伊人久久综合国产精品| 韩国毛片w妈妈的朋友7| 亚洲人人爽人人澡起碰av| 日本男女免费福利视频| 55夜色66夜色亚洲精品| 欧美 日韩 精品 中文| 一区二区三区国产精华液区别大吗 | av中文字幕国产精品| 四虎国产精品国产精品国产精品 | 制服丝袜中文字幕熟女人妻| 超碰在线观看97资源| 一区二区三区四区久久久久韩日| 涩涩黄片在线免费观看| 免费在线观看视频啪啪| 国产精品igao为爱寻找激情| 麻豆国产精品777777在| 亚洲欧美国产人成在线| 精久久久久久久久久久久| 92午夜免费福利视频www| 午夜久久人妻一级内射av网址| 日韩最近中文在线观看| 核xp工厂精品久久亚洲| 国产熟女五十路一区二区三区| 在线免费观看欧美小视频| 亚洲资源在线免费观看| 中文字幕 首页 人妻| 日韩精品视频一区二区三区在线| 美女网站视频久久精品| 国产三级自拍视频在线观看网站| 九九热视频1这里只有精品| 美女妩媚午夜诱惑网站| 美女福利视频一区二区三区四区| 欧美激情视频第一页| 最新日韩中文字幕免费在线观看| 北野中文字幕一区二区| 少妇被中出一区二区| 啪啪啪网站免费在线看| 久久国产精品久精国产爱| 人妻系列在线免费视频| 九九热视频1这里只有精品| 欧美黄色性视频网站| 岛国av成人午夜高清| 东京热日韩av影片| 在线人成视频免费观看尤物| 免费啪啪啪网站在线观看| 欧美黑人1区2区3区| 中文字幕在线免费观看成人| 少妇精品视频一区二区免费看| 精品人妻在线激情视频| 99久久精品视频16| 伊人精品成人综合网| tobu8日本高清| 日本欧美高清在线观看视频| 熟女人妻aⅴ一区二区三| 成人黄色录像在线观看| 大陆中文字幕视频在线| caopeng97在线观看视频| 干逼又爽又黄又免费的视频| 美女网站福利在线观看| 美女av色播在线播放| 人妻色综合aaaaaa网| 亚洲制服丝袜在线看| 国际精品熟女一区二区| 乌克兰美女操逼高清内射视频| 亚洲国产精品一区二区第二页| 91香蕉国产亚洲一二三区| 裸露视频免费在线观看| 男女啪啪啪啪91av日韩| 中文字幕麻绳捆绑的人妻| 五月天天堂视频在线| 在线免费视频999| 老熟女xxxⅹhd老熟女性| 91精产国品一二三产区区别网站| 久久99国产中文丝袜| 男人av一区二区三区| 天天日天天亲天天操| 欧美成人短视频在线播放| 国产精美视频精品视频精品| 国产黑色丝袜 在线日韩欧美| 精品人妻人人做人人爽| 亚洲日本欧美韩国另类综合| 97成人老师在线视频| 国产av嗯嗯啊啊av| 国产天堂av不卡网| 特级aaaaa黄色片| 日韩激情文学在线视频| 老司机在线视频福利观看| 在线 激情 亚洲 视频| 熟女人妻aⅴ一区二区三| 九九热精品视频在线播放| 91大神福利视频网| 亚洲在线观看中文字幕av| 亚洲最大先锋资源采集站| 亚洲一区二区三区无码在线| 麻豆午夜激情在线观看| av毛片在线观看网址| 中文字幕久久久国产| 台湾18禁久久久久久久激情视频| 成人午夜av电影网| 久久99精品久久久久久三级| 干逼又爽又黄又免费的视频|