日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

《Windows via C/C++》学习笔记 —— Windows 线程池

發(fā)布時(shí)間:2025/4/14 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Windows via C/C++》学习笔记 —— Windows 线程池 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  線程池(thread pool),允許有多個(gè)線程同時(shí)存在,并發(fā)執(zhí)行,并且這些線程受到統(tǒng)一管理。

  在Windows Vista中,提供了全新的線程池機(jī)制,一般這些線程池中的線程的創(chuàng)建的銷毀是由操作系統(tǒng)自動(dòng)完成的。

  Windows Vista 中重新設(shè)計(jì)了線程池,提供了一組新的線程池API。因此,本篇討論的僅僅在Windows Vista系統(tǒng),或其以上的Windows版本中有效。

  當(dāng)一個(gè)進(jìn)程創(chuàng)建之后,它并不與線程池關(guān)聯(lián)。一旦新的線程池API函數(shù)被呼叫之后,系統(tǒng)就為該進(jìn)程創(chuàng)建內(nèi)核資源,并且有些資源直到進(jìn)程結(jié)束才釋放。因此,在使用線程池的時(shí)候,線程、其他內(nèi)核對(duì)象、內(nèi)部數(shù)據(jù)結(jié)構(gòu)被分配給進(jìn)程,因此要考慮線程池是否確實(shí)必要。

  線程池機(jī)制有4種功能:

1、調(diào)用一個(gè)異步函數(shù)

2、定時(shí)地調(diào)用一個(gè)函數(shù)

3、當(dāng)一個(gè)內(nèi)核對(duì)象被通知的時(shí)候調(diào)用一個(gè)函數(shù)

4、當(dāng)一個(gè)異步I/O請(qǐng)求完成的時(shí)候調(diào)用一個(gè)函數(shù)

?

  而這4個(gè)功能都和線程池中的“工作項(xiàng)”息息相關(guān)??梢园选肮ぷ黜?xiàng)”看作是一個(gè)特定的工作記錄,記錄著異步函數(shù),線程池定時(shí)器信息,線程池等待對(duì)象信息,線程池I/O對(duì)象,而這4個(gè)對(duì)象就是實(shí)現(xiàn)上述4個(gè)功能的要素。

?

調(diào)用一個(gè)異步函數(shù)

  首先來(lái)討論一下第1種功能:調(diào)用一個(gè)異步函數(shù)。其基本步驟可以有兩種:

  第一種:

1、定義一個(gè)給定格式的異步函數(shù)

2、提交這個(gè)異步函數(shù)給線程池

?

  第二種:

1、定義一個(gè)給定格式的異步函數(shù)

2、創(chuàng)建一個(gè)“工作項(xiàng)”,該工作項(xiàng)與異步函數(shù)、異步函數(shù)參數(shù)關(guān)聯(lián)

3、將這個(gè)工作項(xiàng)提交給線程池

4、關(guān)閉創(chuàng)建的“工作項(xiàng)”

?

  為了在線程池中調(diào)用一個(gè)異步函數(shù),該異步函數(shù)的定義如下(第1個(gè)參數(shù)pInstance暫不討論,可以簡(jiǎn)單地傳遞NULL,下同):

VOID?NTAPI?SimpleCallback(??????????//函數(shù)名可以任意
?????PTP_CALLBACK_INSTANCE?pInstance,
?????PVOID?pvContext);?????
//函數(shù)參數(shù)

?

  然后,你可以提交一個(gè)請(qǐng)求給線程池,讓其中的一個(gè)線程執(zhí)行這個(gè)函數(shù):

BOOL?TrySubmitThreadpoolCallback(
???PTP_SIMPLE_CALLBACK?pfnCallback,???
//按上面格式定義的異步函數(shù)的指針
???PVOID?pvContext,??????????//傳遞給異步函數(shù)的參數(shù)
???PTP_CALLBACK_ENVIRON?pcbe);

?

  TrySubmitThreadpoolCallback 函數(shù)在線程池隊(duì)列中加入一個(gè)“工作項(xiàng)”(work item),如果成功返回TRUE,否則返回FLASE。pcbe參數(shù)下面會(huì)介紹,你可以簡(jiǎn)單地傳遞NULL給這個(gè)參數(shù)(下同)。

  你不必調(diào)用CreateThread來(lái)創(chuàng)建線程,當(dāng)進(jìn)程內(nèi)調(diào)用TrySubmitThreadpoolCallback函數(shù)的時(shí)候,系統(tǒng)會(huì)自動(dòng)地給你的進(jìn)程創(chuàng)建線程池,然后在該線程池隊(duì)列中隊(duì)列中加入一個(gè)“工作項(xiàng)”,并讓其中的一個(gè)線程來(lái)執(zhí)行你定義的異步函數(shù)。當(dāng)異步函數(shù)執(zhí)行完畢后,該線程不會(huì)被銷毀,而是進(jìn)入線程池等待另一個(gè)“工作項(xiàng)”的到來(lái)。線程池中的線程是回收利用的,并不是不斷創(chuàng)建和銷毀的,這樣提高了性能。同時(shí),這個(gè)線程池如果覺(jué)得自己的線程太多的話,就自動(dòng)地銷毀一些線程,可以讓性能達(dá)到最佳。

  你可以使用CreateThreadpoolWork函數(shù)來(lái)創(chuàng)建一個(gè)“工作項(xiàng)”:

PTP_WORK?CreateThreadpoolWork(
???PTP_WORK_CALLBACK?pfnWorkHandler,?????
//異步函數(shù)指針
???PVOID?pvContext,??????????????????????//異步函數(shù)參數(shù)
???PTP_CALLBACK_ENVIRON?pcbe);

?

  該函數(shù)接受一個(gè)異步函數(shù)的指針和這個(gè)異步函數(shù)的參數(shù),并創(chuàng)建一個(gè)用戶模式的數(shù)據(jù)結(jié)構(gòu)來(lái)保存對(duì)應(yīng)的3個(gè)參數(shù)的數(shù)據(jù),同時(shí)返回一個(gè)指向這個(gè)數(shù)據(jù)結(jié)構(gòu)的指針,可以理解為“工作項(xiàng)”指針。

  其中,pfnWordHandler 函數(shù)是一個(gè)異步函數(shù)的指針,這個(gè)異步函數(shù)會(huì)被線程池中某個(gè)線程調(diào)用,該異步函數(shù)定義如下:

VOID?CALLBACK?WorkCallback(?????//函數(shù)名可以任意
???PTP_CALLBACK_INSTANCE?Instance,
???PVOID?Context,??????
//異步函數(shù)參數(shù),由CreateThreadpoolWork函數(shù)指定
???PTP_WORK?Work);?????//線程池“工作項(xiàng)”指針

?

  當(dāng)你想將一個(gè)創(chuàng)建了的工作項(xiàng)提交給線程池,可以使用SubmitThreadpoolWork函數(shù):

VOID?SubmitThreadpoolWork(PTP_WORK?pWork);?????//參數(shù)是工作項(xiàng)指針

?

  如果多次調(diào)用該函數(shù)向一個(gè)線程池提交同一個(gè)工作項(xiàng),那么異步函數(shù)會(huì)被調(diào)用多次,而每次的參數(shù)都是同樣一個(gè)值。

  如果有另一個(gè)線程想要取消提交的工作項(xiàng),或者掛起自己等待工作項(xiàng)完成,可以使用這個(gè)函數(shù):

VOID?WaitForThreadpoolWorkCallbacks(
???PTP_WORK?pWork,?????
//工作項(xiàng)指針
???BOOL?bCancelPendingCallbacks);??//是否取消該工作項(xiàng)

?

  pWork 函數(shù)是一個(gè)工作項(xiàng)指針,由函數(shù)CreateThreadpoolWork創(chuàng)建并返回。如果該工作項(xiàng)沒(méi)有被提交,則該函數(shù)馬上返回,不做任何工作。

  如果傳遞TRUE給參數(shù)bCancelPendingCallbacks,WaitForThreadpoolWorkCallbacks函數(shù)將試圖取消這個(gè)先前提交的工作項(xiàng)。如果這個(gè)工作項(xiàng)正在被處理,那么這個(gè)處理不會(huì)被打斷,該函數(shù)會(huì)等待直到工作項(xiàng)結(jié)束才返回。如果這個(gè)工作項(xiàng)被提交,但是目前不在處理,那么該函數(shù)就會(huì)立即取消該工作項(xiàng)并理解返回,那么這個(gè)工作項(xiàng)的異步函數(shù)就不會(huì)被調(diào)用了。

  如果傳遞FALSE給傳遞bCancelPendingCallbacks,WaitForThreadpoolWorkCallbacks函數(shù)將掛起這個(gè)調(diào)用它的線程,直到指定的工作項(xiàng)完成,而線程池中執(zhí)行這個(gè)工作項(xiàng)的線程在完成處理工作項(xiàng)之后返回線程池,繼續(xù)處理下一個(gè)工作項(xiàng)。

  如果傳遞給WaitForThreadpoolWorkCallbacks函數(shù)的第一個(gè)參數(shù)的工作項(xiàng)指針被提交給線程池多次,也就是說(shuō)多個(gè)工作項(xiàng)使用同一個(gè)工作項(xiàng)指針,如果第2個(gè)參數(shù)為FALSE,那么WaitForThreadpoolWorkCallbacks將等到這個(gè)工作項(xiàng)指針代表的所有工作項(xiàng)處理完成才返回。如果傳遞TRUE給第2個(gè)參數(shù),WaitForThreadpoolWorkCallbacks將等待,只要當(dāng)前正在執(zhí)行的工作項(xiàng)結(jié)束就返回。

  當(dāng)你不要使用工作項(xiàng)的時(shí)候,使用CloseThreadpoolWork函數(shù)關(guān)閉之。?

VOID?CloseThreadpoolWork(PTP_WORK?pwk);

?

定時(shí)調(diào)用一個(gè)函數(shù)

  這是Windows線程池提供的第2個(gè)功能。

  有的時(shí)候,應(yīng)用程序需要在某一個(gè)特定的時(shí)間執(zhí)行特定的任務(wù),你可以選擇使用Windows內(nèi)核對(duì)象“等待定時(shí)器”來(lái)實(shí)現(xiàn)這個(gè)功能,但是如果這種基于時(shí)間的任務(wù)特別的多,那么就不得不為每個(gè)這樣的任務(wù)創(chuàng)建一個(gè)“等待定時(shí)器”對(duì)象,無(wú)疑會(huì)浪費(fèi)資源。當(dāng)然,你也許會(huì)想到創(chuàng)建單個(gè)“等待定時(shí)器”,然后不斷地設(shè)置它的下一次要等待的時(shí)間,這樣就可以完成多個(gè)基于時(shí)間的任務(wù)了。但是如此一來(lái),代碼量就會(huì)增大。

  Windows提供了線程池來(lái)實(shí)現(xiàn)這樣的功能,其方法是通過(guò)“線程池定時(shí)器”。

?

  首先,你要定義一個(gè)如下格式的回調(diào)函數(shù),讓線程池中的線程定時(shí)調(diào)用它:

VOID?CALLBACK?TimeoutCallback(?????//?函數(shù)名可以任意
???PTP_CALLBACK_INSTANCE?pInstance,
???PVOID?pvContext,?????????
//?函數(shù)的參數(shù)
???PTP_TIMER?pTimer);???????//?一個(gè)指向“線程池定時(shí)器”的指針

?

  然后告訴線程池什么時(shí)候調(diào)用你的回調(diào)函數(shù):

PTP_TIMER?CreateThreadpoolTimer(
???PTP_TIMER_CALLBACK?pfnTimerCallback,???
//?類似上面格式的函數(shù)的指針
???PVOID?pvContext,???????????????//?回調(diào)函數(shù)的參數(shù),由這個(gè)參數(shù)指明
???PTP_CALLBACK_ENVIRON?pcbe);

?

  不難發(fā)現(xiàn),CreateThreadpoolTimer函數(shù)和第1種方法中的CreateThreadpoolWork函數(shù)十分類似,而且兩者的回調(diào)函數(shù)也十分類似。當(dāng)調(diào)用CreateThreadpoolTimer函數(shù)的時(shí)候,第1個(gè)參數(shù)指向一個(gè)回調(diào)函數(shù),第2個(gè)參數(shù)pvContext會(huì)傳遞給這個(gè)回調(diào)函數(shù)的第2個(gè)參數(shù),而其返回值——一個(gè)“線程池定時(shí)器”指針也會(huì)傳遞給這個(gè)回調(diào)函數(shù)的第3個(gè)參數(shù)。

  如果你想把由CreateThreadpoolTimer函數(shù)創(chuàng)建的“線程池定時(shí)器”注冊(cè)到線程池中去,可以使用如下函數(shù):

VOID?SetThreadpoolTimer(
???PTP_TIMER?pTimer,????????
//?一個(gè)“線程池定時(shí)器”指針
???PFILETIME?pftDueTime,????//?回調(diào)函數(shù)被調(diào)用的時(shí)間
???DWORD?msPeriod,??????????//?周期性調(diào)用回調(diào)函數(shù)的間隔時(shí)間(毫秒)
???DWORD?msWindowLength);???//?周期時(shí)間的波動(dòng)范圍(毫秒)

?

  該函數(shù)的第1個(gè)參數(shù)pTimer是由CreateThreadpoolTimer函數(shù)返回的。第2個(gè)參數(shù)pftDueTimer是指明回調(diào)函數(shù)什么時(shí)候被調(diào)用,一個(gè)正的數(shù)值表示的是絕對(duì)時(shí)間,即UTC統(tǒng)一時(shí)間;一個(gè)負(fù)數(shù)表示相對(duì)時(shí)間,即調(diào)用該函數(shù)之后開始計(jì)時(shí),以毫秒為單位;如果是-1,表明回調(diào)函數(shù)馬上被調(diào)用。第3個(gè)參數(shù)msPeriod表明周期性地調(diào)用回調(diào)函數(shù)的時(shí)間間隔,即周期時(shí)間,如果只想回調(diào)函數(shù)調(diào)用一次,傳遞0給這個(gè)參數(shù)。第4個(gè)參數(shù)是和第3個(gè)參數(shù)聯(lián)用的,表明周期時(shí)間的波動(dòng)范圍,比如,msPeriod=1000,msWindowLength=2,那么回調(diào)函數(shù)會(huì)在每隔998、999、1000、1001、1002這5個(gè)可能的毫秒時(shí)間被調(diào)用。

  如果一個(gè)“線程池定時(shí)器”已經(jīng)被SetThreadpoolTimer設(shè)置了,那么可以再次呼叫SetThreadpoolTimer函數(shù)來(lái)更改它的相關(guān)屬性。呼叫SetThreadpoolTimer的時(shí)候,可以把NULL傳遞給第2個(gè)參數(shù)pftDueTime,這樣就說(shuō)明讓線程池停止呼叫對(duì)應(yīng)的回調(diào)函數(shù)。

  你可以查詢一個(gè)“線程池定時(shí)器”是否被設(shè)置,呼叫IsThreadpoolTimerSet函數(shù):

BOOL?IsThreadpoolTimerSet(PTP_TIMER?pti);

?

  你也可以讓線程等待一個(gè)“線程池定時(shí)器”完成工作,呼叫函數(shù)WaitForThreadpoolTimerCallbacks,當(dāng)要關(guān)閉一個(gè)“線程池定時(shí)器”的時(shí)候,呼叫函數(shù)CloseThreadpoolTimer,這兩個(gè)函數(shù)同前面討論的WaitForThreadpoolWork和CloseThreadpoolWorkCallbacks函數(shù)類似,可以參考本篇前面的內(nèi)容。

?

  下面總結(jié)一下“線程池定時(shí)器”的使用方法:

  • 定義一個(gè)回調(diào)函數(shù),如TimeoutCallback那樣的格式。
  • 使用CreateThreadpoolTimer函數(shù)創(chuàng)建一個(gè)“線程池定時(shí)器”,并將已定義的回調(diào)函數(shù)與它關(guān)聯(lián)在了一起。
  • 使用SetThreadpoolTimer設(shè)置“線程池定時(shí)器”的屬性,并將其提交給線程池。
  • 調(diào)用CloseThreadpoolTimer關(guān)閉“線程池定時(shí)器”。
  • ?

    當(dāng)一個(gè)內(nèi)核對(duì)象被通知的時(shí)候調(diào)用一個(gè)函數(shù)

      有很多線程,初始化的時(shí)候等待一個(gè)內(nèi)核對(duì)象,一旦這個(gè)內(nèi)核對(duì)象轉(zhuǎn)入“已通知”狀態(tài),線程就會(huì)通知另外一些線程,然后轉(zhuǎn)回繼續(xù)等待這個(gè)內(nèi)核對(duì)象。但是,如果這樣的線程很多的話,無(wú)疑會(huì)增大系統(tǒng)的開銷。

      此時(shí),你可以考慮使用線程池來(lái)實(shí)現(xiàn)這個(gè)功能,就是當(dāng)一個(gè)內(nèi)核對(duì)象被通知的時(shí)候,由線程池中的一個(gè)線程調(diào)用一個(gè)異步的回調(diào)函數(shù)。

       如果你想讓一個(gè)“工作項(xiàng)”在一個(gè)內(nèi)核對(duì)象為“已通知”的狀態(tài)下被執(zhí)行,這個(gè)基本流程和前面兩個(gè)功能的流程類似。

      首先,定義一個(gè)如下格式的異步函數(shù):

    VOID?CALLBACK?WaitCallback(?????//?函數(shù)名可以任意
    ???PTP_CALLBACK_INSTANCE?pInstance,
    ???PVOID?Context,??????????
    //?函數(shù)的參數(shù)
    ???PTP_WAIT?Wait,?????????//?線程池等待對(duì)象的指針
    ???TP_WAIT_RESULT?WaitResult);?????//?該函數(shù)被調(diào)用的原因

    ?

      然后,需要?jiǎng)?chuàng)建一個(gè)“線程池等待對(duì)象”:

    PTP_WAIT?CreateThreadpoolWait(
    ???PTP_WAIT_CALLBACK????pfnWaitCallback,?????
    //?回調(diào)函數(shù)指針,函數(shù)如上定義
    ???PVOID????????????????pvContext,??????????//?傳遞給回調(diào)函數(shù)參數(shù)Context
    ???PTP_CALLBACK_ENVIRON?pcbe);

    ?

      接著就可以將創(chuàng)建的“線程池等待對(duì)象”與這個(gè)線程池關(guān)聯(lián)起來(lái),此時(shí)線程池隊(duì)列中會(huì)有一個(gè)“等待項(xiàng)”記錄:

    VOID?SetThreadpoolWait(
    ???PTP_WAIT??pWaitItem,?????
    //?一個(gè)“線程池等待對(duì)象”指針
    ???HANDLE????hObject,???????//?一個(gè)內(nèi)核對(duì)象句柄,當(dāng)被通知時(shí),回調(diào)函數(shù)被調(diào)用
    ???PFILETIME?pftTimeout);???//?等待hObjetct內(nèi)核對(duì)象受到通知的時(shí)間

    ?

      這個(gè)函數(shù)的第1個(gè)參數(shù)pWaitItem很顯然是從CreateThreadpoolWait成功返回的“線程池等待對(duì)象”指針。第2個(gè)參數(shù)hObject是一個(gè)內(nèi)核對(duì)象句柄,當(dāng)這個(gè)內(nèi)核對(duì)象為“已通知”狀態(tài),則線程池中的一個(gè)線程調(diào)用異步回調(diào)函數(shù)。第3個(gè)參數(shù)pftTimeout是一個(gè)等待內(nèi)核對(duì)象的時(shí)間,如果為0表示不等待;傳遞一個(gè)負(fù)數(shù)表示一個(gè)相對(duì)時(shí)間;傳遞一個(gè)正數(shù)表示絕對(duì)時(shí)間;傳遞NULL表示無(wú)限期地等待。

      要注意的是,不要多次使用SetThreadpoolWait來(lái)等待同一個(gè)hObject。

      當(dāng)內(nèi)核對(duì)象被通知或者等待時(shí)間超出,線程池中的線程將呼叫你的回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)的最后一個(gè)參數(shù)WaitResult的值,其實(shí)是一個(gè)DOWRD類型的,它指明的該回調(diào)函數(shù)被調(diào)用的原因:

    1、WAIT_OBJECT_0:SetThreadpoolWait中第二個(gè)參數(shù)hObject所表明的內(nèi)核對(duì)象受到通知。

    2、WAIT_TIMEOUT:內(nèi)核對(duì)象受到通知的時(shí)間超過(guò)了SetThreadpoolWait的第三個(gè)參數(shù)所設(shè)置的等待時(shí)間。

    3、WAIT_ABANDONED_0:SetThreadWait函數(shù)第二個(gè)參數(shù)hObject代表一個(gè)互斥內(nèi)核對(duì)象,而這個(gè)互斥內(nèi)核對(duì)象被丟棄。

    ?

      一旦一個(gè)線程池線程調(diào)用了你的回調(diào)函數(shù),那么對(duì)應(yīng)的“等待項(xiàng)”就不活躍了,你必須使用相同的參數(shù)再次調(diào)用SetThreadpoolWait函數(shù)來(lái)提交一個(gè)等待項(xiàng)。

      如果想刪除一個(gè)“等待項(xiàng)”,可以使用與之對(duì)應(yīng)的“線程池等待對(duì)象”指針來(lái)調(diào)用SetThreadpoolWait,并將hObejct參數(shù)設(shè)置為NULL。

      最后,你也可以使用WaitForThreadpoolWaitCallbacks來(lái)等待對(duì)應(yīng)的“等待項(xiàng)”結(jié)束,也可以使用CloseThreadpoolWait來(lái)關(guān)閉一個(gè)“等待項(xiàng)”。這兩個(gè)參數(shù)和WaitForThreadpoolWorkCallbakcs和CloseThreadpoolWork是類似的。

    ?

    當(dāng)異步I/O請(qǐng)求結(jié)束的時(shí)候調(diào)用一個(gè)函數(shù)

      讀過(guò)上面3中線程池的功能,不難發(fā)現(xiàn)有很多共同的特點(diǎn),連函數(shù)名稱都很有規(guī)律。線程池中的線程由系統(tǒng)統(tǒng)一管理,自動(dòng)地創(chuàng)建和銷毀。其實(shí),這些線程內(nèi)部都在等待一個(gè)I/O完成端口,這個(gè)I/O完成端口稱為“線程池的I/O完成端口”。

      如果你要使用線程池來(lái)處理設(shè)備異步I/O請(qǐng)求的時(shí)候,當(dāng)你打開一個(gè)設(shè)備的時(shí)候,必須首先將這個(gè)設(shè)備與“線程池I/O完成端口”關(guān)聯(lián)起來(lái),然后告訴線程池當(dāng)設(shè)備異步I/O請(qǐng)求結(jié)束之后哪個(gè)函數(shù)將被調(diào)用。

    ?

      首先,定義一個(gè)如下格式的異步回調(diào)函數(shù):

    VOID?CALLBACK?OverlappedCompletionRoutine(?????//?函數(shù)名可以任意
    ????PTP_CALLBACK_INSTANCE?pInstance,
    ????PVOID??????????pvContext,?????
    //?該函數(shù)的一個(gè)參數(shù)
    ????PVOID??????????pOverlapped,??//?OVERLAPPED結(jié)構(gòu)指針
    ????ULONG?????????IoResult,????????//?I/O請(qǐng)求結(jié)果,如果成功,則為NO_ERROR
    ????ULONG_PTR??NumberOfBytesTransferred,?????//?I/O請(qǐng)求的數(shù)據(jù)傳輸字節(jié)數(shù)
    ????PTP_IO?????????pIo);?????????????//?一個(gè)“線程池I/O完成項(xiàng)”指針

    ?

      這個(gè)函數(shù)的最后一個(gè)參數(shù)pIo是一個(gè)PTP_IO類型,即一個(gè)線程池I/O完成項(xiàng),它與“線程池工作項(xiàng)”和“線程池等待項(xiàng)”是類似的。你必須創(chuàng)建它,使用如下函數(shù):

    PTP_IO?CreateThreadpoolIo(
    ????HANDLE???????hDevice,?????
    //?與線程池I/O完成端口關(guān)聯(lián)的設(shè)備對(duì)象句柄
    ????PTP_WIN32_IO_CALLBACK?pfnIoCallback,?????//?如上格式的異步回調(diào)函數(shù)指針
    ????PVOID????????pvContext,???//?該參數(shù)在調(diào)用時(shí)傳遞給回調(diào)函數(shù)的第2個(gè)參數(shù)
    ????PTP_CALLBACK_ENVIRON??pcbe);

    ?

      該函數(shù)將hDevice參數(shù)所對(duì)應(yīng)的設(shè)備記錄到線程池I/O項(xiàng)中,然后,可以使用如下函數(shù)將設(shè)備與線程池I/O完成端口關(guān)聯(lián)起來(lái):

    VOID?StartThreadpoolIo(PTP_IO?pio);

    ?

      注意,StartThreadpoolIo函數(shù)必須在ReadFile和WriteFile之前調(diào)用,如果沒(méi)有在它們之前調(diào)用,你的異步回調(diào)函數(shù)不會(huì)被調(diào)用。

      當(dāng)你想停止調(diào)用回調(diào)函數(shù)的時(shí)候,可以使用CancelThreadpoolIo,如果在調(diào)用ReadFile或WriteFile之后,它們的返回值是FLASE,而GetLastError的返回值不是ERROR_IO_PENDING,那么也應(yīng)該調(diào)用CancelThreadpoolIo:

    VOID?CancelThreadpoolIo(PTP_IO?pio);

    ?

      當(dāng)結(jié)束了設(shè)備I/O,你應(yīng)該使用CloseHandle關(guān)閉設(shè)備句柄,然后呼叫CloseThradpoolIo關(guān)閉線程池I/O項(xiàng),即取消設(shè)備與線程池I/O請(qǐng)求的關(guān)聯(lián)。

    VOID?CloseThreadpoolIo(PTP_IO?pio);

    ?

      另外,你可以讓一個(gè)線程等待I/O請(qǐng)求結(jié)束:

    VOID?WaitForThreadpoolIoCallbacks(
    ???PTP_IO?pio,
    ???BOOL?bCancelPendingCallbacks);?????
    //?是否取消回調(diào)函數(shù)的調(diào)用

    ?

      如果給這個(gè)函數(shù)的參數(shù)BCancelPendingCallbacks傳遞TRUE,那么回調(diào)函數(shù)將不會(huì)被調(diào)用,該函數(shù)的用法和WaitForThreadpoolWork是類似的。

    ?

    回調(diào)函數(shù)結(jié)束之后的行為

      注意上面討論的各種類型的回調(diào)函數(shù)第1個(gè)參數(shù),是一個(gè)PTF_CALLBACK_INSTANCE類型的數(shù)據(jù)pInstance,從字面上看,是“線程池回調(diào)函數(shù)實(shí)體指針”,也就是說(shuō),這個(gè)數(shù)據(jù)是各個(gè)回調(diào)函數(shù)唯一的,是回調(diào)函數(shù)的標(biāo)識(shí),這個(gè)數(shù)據(jù)是在調(diào)用回調(diào)函數(shù)之前由系統(tǒng)自動(dòng)分配的,可以用這個(gè)參數(shù)調(diào)用如下函數(shù):

    ?

    //?當(dāng)回調(diào)函數(shù)返回的時(shí)候,自動(dòng)離開一個(gè)指定的關(guān)鍵代碼段
    VOID?LeaveCriticalSectionWhenCallbackReturns(
    ?????PTP_CALLBACK_INSTANCE?pci,?????
    //?回調(diào)函數(shù)實(shí)體指針,標(biāo)識(shí)一個(gè)回調(diào)函數(shù)
    ?????PCRITICAL_SECTION?pcs);??????//?關(guān)鍵代碼段結(jié)構(gòu)指針,標(biāo)識(shí)一個(gè)關(guān)鍵代碼段

    //?當(dāng)回調(diào)函數(shù)返回的時(shí)候,自動(dòng)釋放一個(gè)指定的互斥內(nèi)核對(duì)象
    VOID?ReleaseMutexWhenCallbackReturns(
    ?????PTP_CALLBACK_INSTANCE?pci,
    ?????HANDLE?mut);

    //?當(dāng)回調(diào)函數(shù)返回的時(shí)候,自動(dòng)釋放一個(gè)指定的信號(hào)量?jī)?nèi)核對(duì)象
    VOID?ReleaseSemaphoreWhenCallbackReturns(
    ?????PTP_CALLBACK_INSTANCE?pci,
    ?????HANDLE?sem,
    ?????DWORD?crel);

    //?當(dāng)回調(diào)函數(shù)返回的時(shí)候,自動(dòng)將一個(gè)事件內(nèi)核對(duì)象設(shè)置為已通知狀態(tài)
    VOID?SetEventWhenCallbackReturns(
    ?????PTP_CALLBACK_INSTANCE?pci,
    ?????HANDLE?evt);

    //?當(dāng)回調(diào)函數(shù)返回的時(shí)候,自動(dòng)卸載一個(gè)模塊
    VOID?FreeLibraryWhenCallbackReturns(
    ?????PTP_CALLBACK_INSTANCE?pci,
    ?????HMODULE?mod);

    ?

      這些函數(shù)的第1個(gè)參數(shù)pci標(biāo)識(shí)當(dāng)線程池前正在處理的工作、定時(shí)器、等待、I/O項(xiàng),調(diào)用這些函數(shù),表示對(duì)應(yīng)的回調(diào)函數(shù)結(jié)束之后,所做的一些釋放和設(shè)置工作。

      其中,前4個(gè)函數(shù),提供了一種方法來(lái)通知其他線程,說(shuō)明線程池中的某一個(gè)工作項(xiàng)完成。最后一個(gè)函數(shù),提供了一種方法來(lái)卸載DLL的方法,特別是當(dāng)回調(diào)函數(shù)是從DLL中導(dǎo)出的時(shí)候,這種方法特別適用。要注意的是,只能有一個(gè)動(dòng)作在回調(diào)函數(shù)返回的時(shí)候被執(zhí)行,你不能多次呼叫上述5個(gè)函數(shù),這樣的話,最后一次呼叫的函數(shù)會(huì)覆蓋前面所呼叫的函數(shù),因此,不能同時(shí)離開關(guān)鍵代碼段并釋放信號(hào)量?jī)?nèi)核對(duì)象。

      另外,還有兩個(gè)函數(shù)需要回調(diào)函數(shù)實(shí)體指針:

    BOOL?CallbackMayRunLong(PTP_CALLBACK_INSTANCE?pci); VOID?DisassociateCurrentThreadFromCallback(PTP_CALLBACK_INSTANCE?pci);

    ?

      CallbackMayRunLong并不是設(shè)置回調(diào)函數(shù)結(jié)束時(shí)的工作的,而是當(dāng)一個(gè)回調(diào)函數(shù)認(rèn)為自己執(zhí)行的時(shí)間可能比較長(zhǎng)才可能需要呼叫這個(gè)函數(shù)。此時(shí),線程池不會(huì)創(chuàng)建新的線程,以此來(lái)提高這個(gè)回調(diào)函數(shù)的性能。當(dāng)該函數(shù)返回FLASE,線程池不允許其他線程能夠處理線程池隊(duì)列中的其他項(xiàng);如果返回TRUE,表示線程池允許其他線程處理其他工作項(xiàng)。

      DisassociateCurrentThreadFromCallback函數(shù)表明與回調(diào)函數(shù)關(guān)聯(lián)的工作項(xiàng)在“邏輯上”完成了(其實(shí)不是真正完成),此時(shí)允許等待在這個(gè)工作項(xiàng)上的函數(shù)返回,比如WaitForThreadpoolWorkCallbacks、WaitForThreadpoolTimerCallbacks、WaitForThreadpoolWaitCallbacks、WaitForThreadpoolIoCallbacks這些函數(shù)返回。

    ?

    定制線程池

      以上所討論的線程池,都是系統(tǒng)自動(dòng)控制的,用戶無(wú)法改變其內(nèi)部的流程。

      下面,我們討論一下如何自己定制線程池。

      你會(huì)注意到,上面的每個(gè)“創(chuàng)建”函數(shù):CreateThreadpoolWork、CreateThreadpoolTimer、CreateThreadpoolWait、CreateThreadpoolIo以及TrySubmitThreadpoolCallback這5個(gè)函數(shù)中的最后一個(gè)參數(shù)pcbe,一個(gè)類型為PTP_CALLBACK_ENVIRON的參數(shù),一個(gè)指向“回調(diào)函數(shù)環(huán)境”結(jié)構(gòu)的指針。你可以簡(jiǎn)單地傳遞NULL給這個(gè)參數(shù),表明你使用默認(rèn)的系統(tǒng)自動(dòng)分配和管理的進(jìn)程線程池。

      但是,有的時(shí)候程序員喜歡自己來(lái)控制線城池,給線城池設(shè)置一些規(guī)則和屬性。比如設(shè)置改線城池中線程的數(shù)量上下限,或者想操縱線城池中線程的創(chuàng)建和銷毀。

      要達(dá)到這個(gè)目的,可以自己創(chuàng)建線程池,然后設(shè)置一些屬性。

      首先,創(chuàng)建一個(gè)線程池,使CreateThreadpool函數(shù):

    PTP_POOL?CreateThreadpool(PVOID?reserved);??//?參數(shù)是保留參數(shù),必須為NULL

    ?

      該函數(shù)返回一個(gè)PTP_POOL類型的數(shù)據(jù),姑且認(rèn)為是“線城池指針”的意思,即代表了一個(gè)線程池。

      然后,就可以通過(guò)這個(gè)線城池指針來(lái)呼叫相應(yīng)的API函數(shù),設(shè)置線程池的一些屬性了。

      你可以設(shè)置線城池的線程數(shù)量的上下限:

    BOOL?SetThreadpoolThreadMinimum(

    ?????PTP_POOL?pThreadPool,

    ?????DWORD?cthrdMin);


    BOOL?SetThreadpoolThreadMaximum(

    ?????PTP_POOL?pThreadPool,

    ?????DWORD?cthrdMost);

    ?

    ?

      通過(guò)呼叫這兩個(gè)函數(shù)之后,線程池中的線程的數(shù)量決不會(huì)少于設(shè)置的最小值,并且允許這個(gè)數(shù)量增大到最大值。順便說(shuō)一下,默認(rèn)的線城池的線程數(shù)量范圍為1~500。

      當(dāng)一個(gè)線程池需要關(guān)閉的時(shí)候,呼叫CloseThreadpool函數(shù):

    VOID?CloseThreadpool(PTP_POOL?pThreadPool);

    ?

      呼叫這個(gè)函數(shù)之后,對(duì)應(yīng)的線程池隊(duì)列中的項(xiàng)都不會(huì)被處理,當(dāng)前正在處理工作項(xiàng)的線程都會(huì)結(jié)束處理然后線程終止,其他還沒(méi)有被處理的項(xiàng)都會(huì)被取消。

      一旦你創(chuàng)建了你自己的線程池并設(shè)置了線程數(shù)量上下限,你就初始化那個(gè)“回調(diào)函數(shù)環(huán)境”結(jié)構(gòu)了,該結(jié)構(gòu)中包含了另外的一些設(shè)置。這個(gè)結(jié)構(gòu)與一個(gè)工作項(xiàng)有關(guān)。該結(jié)構(gòu)定義如下:

    typedef?struct?_TP_CALLBACK_ENVIRON?{
    ???TP_VERSION??Version;
    ???PTP_POOL??????Pool;?????
    //?所屬哪個(gè)線程池
    ???PTP_CLEANUP_GROUP??CleanupGroup;
    ???PTP_CLEANUP_GROUP_CANCEL_CALLBACK?CleanupGroupCancelCallback;
    ???PVOID???????????RaceDll;
    ???
    struct?_ACTIVATION_CONTEXT??*ActivationContext;
    ???PTP_SIMPLE_CALLBACK?????????????FinalizationCallback;

    ???union?{
    ??????DWORD??Flags;
    ??????
    struct?{
    ?????????DWORD??LongFunction?:??
    1;
    ?????????DWORD??Private??????:?
    31;
    ??????}?s;
    ???}?u;
    }?TP_CALLBACK_ENVIRON,?
    *PTP_CALLBACK_ENVIRON;

    ?

      你最好不要自己去初始化該結(jié)構(gòu),而是應(yīng)該使用如下函數(shù):

    VOID?InitializeThreadpoolEnvironment(PTP_CALLBACK_ENVIRON?pcbe);

    ?

      該函數(shù)將結(jié)構(gòu)中的各個(gè)字段設(shè)置為0,除了Version被設(shè)置為1。

      當(dāng)你不再需要使用該結(jié)構(gòu)的時(shí)候,使用如下函數(shù)刪除它:

    VOID?DestroyThreadpoolEnvironment(PTP_CALLBACK_ENVIRON?pcbe);

    ?

       在初始化TP_CALLBACK_ENVIRON結(jié)構(gòu)之后,該結(jié)構(gòu)與一個(gè)工作項(xiàng)相關(guān),然后你就可以使用這個(gè)結(jié)構(gòu)來(lái)提交一個(gè)工作項(xiàng)給指定的線程池了:

    VOID?SetThreadpoolCallbackPool(
    ?????PTP_CALLBACK_ENVIRON?pcbe,?
    //?回調(diào)函數(shù)環(huán)境結(jié)構(gòu)指針
    ?????PTP_POOL?pThreadPool);?????//?線程池指針,由CreateThreadpool函數(shù)返回

    ?

      如果不調(diào)用該函數(shù),那么回調(diào)函數(shù)環(huán)境結(jié)構(gòu)中的Pool成員的值就是NULL,表示不為任何定制的線程池相關(guān),那么與此結(jié)構(gòu)相關(guān)的工作項(xiàng)就會(huì)提交給默認(rèn)線程池。

      如果一個(gè)工作項(xiàng)處理的時(shí)間比較長(zhǎng),可以調(diào)用SetThreadpoolCallbackRunsLong函數(shù),這會(huì)導(dǎo)致線程池更快地創(chuàng)建線程來(lái)處理這個(gè)工作項(xiàng)。

    VOID?SetThreadpoolCallbackRunsLong(PTP_CALLBACK_ENVIRON?pcbe);

    ?

      你可以呼叫SetThreadpoolCallbackLibrary來(lái)確保當(dāng)某個(gè)工作項(xiàng)未完成的時(shí)候,一個(gè)DLL始終被加載到進(jìn)程地址中。該函數(shù)也可以除去潛在的死鎖。

    VOID?SetThreadpoolCallbackLibrary(
    ?????PTP_CALLBACK_ENVIRON?pcbe,
    ?????PVOID?mod);?????
    //?模塊指針,就是模塊句柄

    ?

      線程池要處理很多的項(xiàng)目,因此很難確定這些項(xiàng)目什么時(shí)候處理結(jié)束,這也使得線程池的清除工作困難了。為了解決這種情況,線程池提供了一種機(jī)制——“清理組”。要注意的是,該機(jī)制不適合于默認(rèn)線程池,只適合于定制的線程池。因?yàn)槟J(rèn)線程池的生命期與進(jìn)程一樣,系統(tǒng)會(huì)在進(jìn)程結(jié)束之后清除默認(rèn)線程池。

      為了使用“清理組”機(jī)制,首先,你需要?jiǎng)?chuàng)建一個(gè)清理組:

    PTP_CLEANUP_GROUP?CreateThreadpoolCleanupGroup();

    ?

      然后將已創(chuàng)建的清理組與線程池關(guān)聯(lián)起來(lái):

    VOID?SetThreadpoolCallbackCleanupGroup(
    ??PTP_CALLBACK_ENVIRON?pcbe,?????
    //?回調(diào)函數(shù)環(huán)境結(jié)構(gòu)指針
    ??PTP_CLEANUP_GROUP?ptpcg,????????//?清理組指針
    ??PTP_CLEANUP_GROUP_CANCEL_CALLBACK?pfng);?????//?回調(diào)函數(shù)指針


      該函數(shù)在內(nèi)部將回調(diào)函數(shù)指針p的cbe參數(shù)CleanupGroup和CleanupCancelCallback成員設(shè)置為第2和第3個(gè)參數(shù)所提供的值。如果清理組被取消,第3個(gè)參數(shù)pfng表示的回調(diào)函數(shù)將會(huì)被調(diào)用,這個(gè)回調(diào)函數(shù)必須滿足如下格式:

    VOID?CALLBACK?CleanupGroupCancelCallback(?????//?函數(shù)名可以任意
    ??PVOID?pvObjectContext,
    ??PVOID?pvCleanupContext);


      每次你調(diào)用CreateThreadpoolWork、CreateThreadpoolTimer、CreateThreadpoolWait和CreateThreadpoolIo的時(shí)候,如果傳遞給它們的最后一個(gè)參數(shù)pcbe不是NULL,那么一項(xiàng)就會(huì)加入相關(guān)的組清理中,當(dāng)這樣的項(xiàng)都完成之后,你調(diào)用CloseThreadpoolWork、CloseThreadpoolTimer、CloseThreadpoolWait、ClsoeThreadpoolIo的時(shí)候,又暗中地將這樣的項(xiàng)從組清理中刪除了。

      這個(gè)時(shí)候,想要?jiǎng)h除線程池,可以調(diào)用如下函數(shù):

    VOID?CloseThreadpoolCleanupGroupMembers(
    ??PTP_CLEANUP_GROUP?ptpcg,??????
    //?組清理指針
    ??BOOL?bCancelPendingCallbacks,?//?是否取消即將開始執(zhí)行的回調(diào)函數(shù)
    ??PVOID?pvCleanupContext);??????//?傳入CleanupGroupCancelCallback的參數(shù)

    ?

      這個(gè)函數(shù)同以前的WaitForThreadpool*函數(shù)類似,當(dāng)一個(gè)線程呼叫它時(shí),它等待,直到所有的在線程工作組的項(xiàng)完成處理。如果第2個(gè)參數(shù)為TRUE,會(huì)取消所有還沒(méi)有開始執(zhí)行的項(xiàng)目,然后等待當(dāng)前正在執(zhí)行的項(xiàng)目,直到它們執(zhí)行完成后該函數(shù)返回。如果第2個(gè)參數(shù)為TRUE,而且SetThreadpoolCallbackCleanupGroup的最后一個(gè)參數(shù)pfng傳遞了一個(gè)回調(diào)函數(shù)指針,那么這個(gè)回調(diào)函數(shù)就會(huì)為每個(gè)被取消的項(xiàng)目調(diào)用一次,CloseThreadpoolCleanupGroupMembers函數(shù)的第3個(gè)參數(shù)pvCleanupContext就會(huì)傳入回調(diào)函數(shù)的第2個(gè)參數(shù)pvCleanupContext。

    ?

      如果在呼叫CloseThreadpoolCleanupGroupMembers函數(shù)的時(shí)候,傳遞FLASE給第2個(gè)參數(shù),那么該函數(shù)就會(huì)等待線程池中隊(duì)列中的所有的項(xiàng)完成之后才返回,此時(shí)回調(diào)函數(shù)不會(huì)被調(diào)用,因此可以傳遞NULL給pvCleanupContext參數(shù)。

    ?

      當(dāng)ClsetThreadpoolCleanupGroupMembers函數(shù)返回之后,你需要呼叫CloseThreadpoolCleanupGroup來(lái)關(guān)閉一個(gè)線程池清理組:

    VOID?WINAPI?CloseThreadpoolCleanupGroup(PTP_CLEANUP_GROUP?ptpcg);

    ?

      最后,要調(diào)用DestroyThreadpoolEvironment和CloseThreadpool函數(shù)來(lái)清除回調(diào)函數(shù)環(huán)境結(jié)構(gòu)和關(guān)閉線程池。

    ?

    小結(jié)

      通過(guò)前面的敘述,線程池的操作流程是比較固定的:

    1、定義異步回調(diào)函數(shù)

    2、創(chuàng)建相關(guān)項(xiàng)

    3、提交或設(shè)置項(xiàng)

    4、線程池執(zhí)行

    5、關(guān)閉相關(guān)項(xiàng)

    ?

      自己寫了一段代碼,總結(jié)了前面的知識(shí),代碼中省略了第1步,即沒(méi)有定義回調(diào)函數(shù),因?yàn)檫@是根據(jù)需要而編寫的。如果代碼中有錯(cuò)誤,還請(qǐng)大家指出。

    PTP_POOL?pThreadpool?=?CreateThreadpool(NULL);????//?創(chuàng)建線程池

    //?設(shè)置線程池線程數(shù)量上下限
    SetThreadpoolThreadMinimum(pThreadpool,?2);
    SetThreadpoolThreadMaximum(pThreadpool,?
    10);

    //?初始化“回調(diào)函數(shù)環(huán)境”結(jié)構(gòu)
    TP_CALLBACK_ENVIRON?tcbe;
    InitializeThreadpoolEnvironment(
    &tcbe);

    //?將該回調(diào)函數(shù)環(huán)境結(jié)構(gòu)與線程池相關(guān)聯(lián)
    SetThreadpoolCallbackPool(&tcbe,?pThreadpool);

    //?創(chuàng)建清理組
    PTP_CLEANUP_GROUP?pTpcg=?CreateThreadpoolCleanupGroup();

    //?將回調(diào)函數(shù)環(huán)境結(jié)構(gòu)與清理組關(guān)聯(lián)起來(lái)
    SetThreadpoolCallbackCleanupGroup(&tcbe,?pTpcg,?NULL);

    //?現(xiàn)在可以創(chuàng)建一些項(xiàng),提交給線程池
    PTP_WORK?pTpWork?
    =?CreateThreadpoolWork(,?&tcbe);//?創(chuàng)建一個(gè)工作項(xiàng)
    SubmitThreadpoolWork(pTpWork);????//?提交工作項(xiàng)
    PTP_TIMER?pTpTimer?=?CreateThreadpoolTimer(,?&tcbe);//?創(chuàng)建一個(gè)定時(shí)器項(xiàng)
    SetThreadpoolTimer(pTpTimer,?);??????//?提交定時(shí)器
    PTP_WAIT?pTpWait?=?CreateThreadpoolWait(,?&tcbe);//?創(chuàng)建一個(gè)等待項(xiàng)
    SetThreadpoolWait(pTpWait,?);????//?提交等待項(xiàng)
    PTP_IO?pTpIO?=?CreateThreadpoolIo(,?&tcbe);????//?創(chuàng)建一個(gè)IO項(xiàng)
    StartThreadpoolIo(pTpIO);????//?開始執(zhí)行IO項(xiàng)

    //?等待所有項(xiàng)完成
    CloseThreadpoolCleanupGroupMembers(pTpcg,?FALSE,?NULL);

    //?關(guān)閉各個(gè)項(xiàng)
    CloseThreadpoolWork(pTpWork);
    CloseThreadpoolTimer(pTpTimer);
    CloseThreadpoolWait(pTpWait);
    CloseThreadpoolIo(pTpIO);

    CloseThreadpoolCleanupGroup(pTpcg);????
    //?關(guān)閉線程池清理組
    DestroyThreadpoolEnvironment(&tcbe);????//?刪除回調(diào)函數(shù)環(huán)境結(jié)構(gòu)
    CloseThreadpool(pThreadpool);????//?關(guān)閉線程池

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/wz19860913/archive/2008/08/25/1274214.html

    總結(jié)

    以上是生活随笔為你收集整理的《Windows via C/C++》学习笔记 —— Windows 线程池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    亚洲国产精品一区二区久久,亚洲午夜 | 欧美日本不卡高清 | 91香蕉视频在线下载 | 国产精品一区二区久久 | 久久艹艹| 97视频在线观看免费 | 九色视频自拍 | 久草在线视频首页 | 三日本三级少妇三级99 | 97人人澡人人添人人爽超碰 | av天天色| 午夜精品一区二区三区视频免费看 | 亚洲高清久久久 | 久久精品视频播放 | 亚洲精品综合欧美二区变态 | 精品黄色视| 国产亚洲综合性久久久影院 | 国产一区二区三区免费在线观看 | 综合av在线 | 免费av福利 | 91成版人在线观看入口 | 精品在线视频一区 | 久久久久国产精品视频 | 一级免费黄视频 | 中文字幕一区二 | a天堂在线看 | 日韩高清精品免费观看 | 久久综合狠狠综合久久激情 | 成人在线播放av | 国内精品久久久久久久影视简单 | 日本视频久久久 | 97av在线| 欧美日韩免费在线观看视频 | 成人黄色免费在线观看 | 成人在线免费观看视视频 | 午夜少妇一区二区三区 | 黄网站免费大全入口 | 毛片一级免费一级 | 欧美亚洲精品一区 | 人人躁| 成人午夜免费剧场 | 女人18片毛片90分钟 | 婷婷国产一区二区三区 | 国产精品成人品 | 精品国产一区二区三区久久久蜜臀 | 国产精品日韩欧美一区二区 | 91在线网站 | 久久国产精品久久精品 | 国产一区二区手机在线观看 | 国产精品久久久久久久7电影 | 日本中文在线观看 | 午夜精品久久久久久久爽 | 涩涩网站在线观看 | 免费成人在线视频网站 | 在线视频中文字幕一区 | 在线看毛片网站 | 91免费高清观看 | 婷婷深爱网 | 奇米先锋| 亚洲欧美激情精品一区二区 | 日日成人网 | 国产精品一区二区视频 | 中文字幕欧美激情 | 国产精品 国产精品 | 国产伦理久久精品久久久久_ | 精品亚洲男同gayvideo网站 | 国产一级性生活 | 国产精品激情在线观看 | 亚洲 欧洲 国产 日本 综合 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 成年人免费观看在线视频 | 欧美精品三级在线观看 | 不卡的av在线 | 国产明星视频三级a三级点| 成人av中文字幕 | 亚洲 欧洲 国产 精品 | 91在线porny国产在线看 | 免费男女羞羞的视频网站中文字幕 | 在线免费高清视频 | 99视频久久| 久产久精国产品 | 一区二区电影网 | 日本精品一二区 | 97色婷婷 | 亚洲国产精品va在线看黑人 | 久久久麻豆视频 | 狠狠的干 | 九九免费观看全部免费视频 | 超碰成人网 | 在线观看免费91 | 精品国产精品国产偷麻豆 | 九九交易行官网 | 久久免费视频国产 | 亚洲精品久久久久久久蜜桃 | av青草 | 天天色天天色 | 日韩一区在线播放 | 激情综合亚洲 | 精品福利片 | 五月天天天操 | www免费在线观看 | 久久人人爽人人爽人人片av软件 | 亚洲免费精品一区二区 | 精品视频久久久久久 | 在线观看小视频 | 国产精品美女久久久久aⅴ 干干夜夜 | 日韩精品视频免费在线观看 | 成人免费一区二区三区在线观看 | 激情五月***国产精品 | 国产一区二区在线影院 | 国产五月色婷婷六月丁香视频 | 国产欧美在线一区 | 国产美女永久免费 | 色资源在线 | 久久天天躁夜夜躁狠狠85麻豆 | 狠狠色丁香婷婷综合基地 | 天天干天天色2020 | 日韩欧美在线免费观看 | 久草在线免费资源 | 亚洲国产高清在线观看视频 | 亚洲黄色av| 六月激情久久 | 国产精品一区二区免费视频 | 国产一区欧美二区 | 91av视频在线免费观看 | 午夜av激情| 黄色在线观看免费网站 | 国产精品免费久久久久久 | 狠狠狠色丁香综合久久天下网 | 97在线观看视频 | 国内偷拍精品视频 | 黄色软件在线观看 | 天天干,天天射,天天操,天天摸 | 天天射天天爽 | 国产精品美女视频网站 | 999电影免费在线观看2020 | 黄色一级大片在线免费看国产一 | 日韩在线电影一区 | 99国产视频在线 | 91看国产| 在线观看国产麻豆 | 国产不卡在线播放 | 欧美日韩伦理一区 | 精品国产1区2区3区 国产欧美精品在线观看 | 成人在线观看av | av高清免费| 欧美日韩高清一区二区三区 | 久久久久久国产精品亚洲78 | 国产在线观看污片 | 欧洲精品久久久久毛片完整版 | 国产精品久久久电影 | 91九色视频网站 | 狠狠久久 | 精品影院一区二区久久久 | 一区二区三区四区五区在线视频 | 亚洲激情国产精品 | 成人综合婷婷国产精品久久免费 | 久草免费在线视频 | 久久精品一二区 | 国产精品视频大全 | 欧美天堂久久 | 日韩在线国产精品 | 免费涩涩网站 | 日韩av资源站 | 国产精品久久9 | 日日夜夜精品网站 | 麻豆国产视频下载 | 色婷婷电影 | 亚洲精品视频免费看 | 国产成人av在线影院 | 欧美人zozo| 日韩高清在线一区 | 婷婷爱五月天 | 国产精品久久久777 成人手机在线视频 | 香蕉影视app | 四虎国产精品成人免费影视 | 日本午夜在线观看 | 久久99精品国产麻豆宅宅 | 丁香5月婷婷 | 欧美性春潮 | 亚洲 欧洲 国产 精品 | 人人干天天射 | 激情综合久久 | 色a综合 | 韩日精品在线 | 国产精品视频永久免费播放 | 欧美日产在线观看 | 国产精品福利在线播放 | 在线成人看片 | 亚洲国产免费看 | 天天天天天天操 | 欧美在一区 | 一区二区三区福利 | 丁香久久五月 | 在线观看www. | 欧美激情视频久久 | 欧美日韩视频精品 | 日日夜夜综合 | 97电影在线看视频 | 中文字幕亚洲五码 | 国产人成一区二区三区影院 | 黄色美女免费网站 | 狠狠激情中文字幕 | 国产九色在线播放九色 | 6080yy精品一区二区三区 | 国产日韩欧美在线免费观看 | 国产一区免费在线观看 | 精品国产精品久久一区免费式 | 美腿丝袜一区二区三区 | av资源免费观看 | 欧美日韩免费在线观看视频 | 国产 日韩 欧美 中文 在线播放 | 国产黄色大片免费看 | 亚洲 精品在线视频 | 亚洲国产中文字幕在线观看 | 久久人人爽爽人人爽人人片av | 亚洲激情五月 | av片子在线观看 | 国产精品欧美一区二区三区不卡 | 福利一区视频 | 黄色小说网站在线 | 91精品国自产在线偷拍蜜桃 | 91探花系列在线播放 | 久久国产亚洲 | 色天天 | 99国产精品免费网站 | 国产福利网站 | 久久久麻豆视频 | 中文视频在线播放 | 香蕉视频在线免费 | 成人精品一区二区三区中文字幕 | 国产一区免费在线 | 中文在线8资源库 | 胖bbbb搡bbbb擦bbbb | 黄色免费高清视频 | 久久国产一区 | 伊人va| 美女视频黄免费网站 | 日韩av电影免费在线观看 | 久久久噜噜噜久久久 | 国产精品福利无圣光在线一区 | 看国产黄色片 | 狠狠综合久久av | 色噜噜在线观看视频 | 24小时日本在线www免费的 | 日本性xxx | 国产精品自产拍在线观看蜜 | www.久久爱.cn | 五月天婷婷综合 | 亚洲一级国产 | 色综合咪咪久久网 | 天天干天天综合 | www.国产精品 | 日日夜夜免费精品 | 天天射狠狠干 | 免费欧美精品 | 高清视频一区 | 一区二区三区日韩在线 | 91在线看 | 国产黄色成人av | 国产 色| 国产免费人成xvideos视频 | 欧美一区二区日韩一区二区 | 国产高清视频在线观看 | 日韩久久精品 | 久久特级毛片 | 亚洲综合色婷婷 | 97人人添人澡人人爽超碰动图 | 国产精久久久久久妇女av | 日韩欧美电影在线 | 久久成人国产精品入口 | 免费看国产黄色 | 亚洲一区二区三区在线看 | 欧美a级片网站 | 91在线porny国产在线看 | 久久69精品久久久久久久电影好 | 国产精品成人一区二区 | 久久久久综合网 | 日黄网站 | 欧美亚洲一区二区在线 | 在线v片免费观看视频 | 人人草人人草 | 精品人人人 | 18久久久| 亚洲三区在线 | 婷色在线| av中文字幕电影 | 免费的黄色av | 欧洲精品视频一区二区 | 久久韩国免费视频 | 99精品视频网 | 香蕉视频在线免费 | 黄色国产在线观看 | 欧美在一区 | 国内精品久久久久影院一蜜桃 | 成人在线观看免费视频 | 一级片视频免费观看 | 97av视频 | 中文字幕免费一区 | 91网址在线观看 | 美女黄频免费 | 日日夜夜免费精品 | 国产精品成人在线 | 区一区二区三区中文字幕 | 九九视频免费观看视频精品 | 九七视频在线观看 | 制服丝袜天堂 | 欧美一级特黄aaaaaa大片在线观看 | 在线免费观看国产精品 | 国产色 在线 | 成 人 黄 色视频免费播放 | 九九久久影院 | www免费看片com | 在线观看av国产 | 国产短视频在线播放 | 欧美 日韩 国产 成人 在线 | 这里只有精品视频在线观看 | 久久好看免费视频 | 国产精品密入口果冻 | www黄免费 | 亚洲香蕉视频 | 亚洲精品久久激情国产片 | 日韩欧美一区二区三区免费观看 | 久久久午夜精品理论片中文字幕 | 香蕉视频免费在线播放 | 二区三区av | 97人人看| 久久爱综合 | 中文字幕一区二区三区四区在线视频 | 丁香五婷 | 亚洲成av人片在线观看 | av电影中文字幕 | 青青河边草免费视频 | 九九国产精品视频 | 六月色播 | 亚州精品天堂中文字幕 | 91在线视频观看免费 | 日韩精品一区二区三区三炮视频 | 国内久久 | 日本不卡视频 | 日韩天堂网 | 99免费在线观看 | 国产精品久久久久久久av大片 | 国产三级av在线 | 国产精品美女久久久久久网站 | 美女一区网站 | 国内久久看 | 成人午夜影院 | 视频 国产区 | 91完整版观看 | 国产精品一区二区久久精品爱微奶 | 国产裸体视频bbbbb | 久久久午夜精品福利内容 | 亚洲视频免费视频 | 亚洲成人一区 | 国产精品一区二区三区久久久 | 中文视频在线看 | 日韩欧美视频免费看 | 欧美日韩亚洲精品在线 | 免费av网站在线 | 91九色视频网站 | 中国一级片在线 | 97香蕉久久超级碰碰高清版 | 丰满少妇在线 | 免费在线观看av片 | 四虎永久国产精品 | 国产在线v | 中文字幕专区高清在线观看 | 久久久精品国产免费观看同学 | 色片网站在线观看 | 亚洲免费在线播放视频 | 日韩精品电影在线播放 | 五月开心六月婷婷 | 久久久久久久久毛片精品 | 五月开心六月伊人色婷婷 | 欧美a在线免费观看 | 黄网站大全 | 在线观看免费成人av | 五月婷香蕉久色在线看 | 亚洲一区日韩在线 | 51久久夜色精品国产麻豆 | 激情电影在线观看 | 黄色大片免费播放 | 91精品影视 | 黄色a在线观看 | 中文字幕一区二区三区在线观看 | 国产黄色高清 | 波多野结衣在线视频免费观看 | 日韩性片| 狠狠躁天天躁 | 狠狠干在线 | 亚洲精品美女视频 | 欧美狠狠色 | 99视频99| 伊人天堂网 | 精品久久久久久久久久久久久 | 成人免费在线观看电影 | 日韩午夜高清 | 国产区久久| 国产毛片久久久 | 国产二区av | 国产精品1区2区3区在线观看 | 日韩中文字幕国产 | 色网站国产精品 | a精品视频 | 国产亚洲视频中文字幕视频 | 五月天婷婷在线观看视频 | 综合色在线观看 | 久久99深爱久久99精品 | 国产精品观看视频 | 美女视频久久久 | 成片免费观看视频大全 | 成人影片在线免费观看 | 免费高清国产 | www蜜桃视频 | 很黄很色很污的网站 | 国产一区二区免费在线观看 | 精品久久在线 | 亚洲天天在线 | 69久久夜色精品国产69 | 热久久视久久精品18亚洲精品 | 日韩精品一区二区三区免费观看 | 国产日韩精品在线 | 免费又黄又爽的视频 | 日本公妇在线观看 | 国产美女精品视频 | 精品国产一区二区在线 | 91久久精品一区二区二区 | 久久久精品影视 | 福利电影一区二区 | 激情小说久久 | 久久久久国产精品午夜一区 | 国产日本亚洲 | 麻豆久久一区 | 国产亚洲精品久久久久秋 | 天天色天天干天天 | 91精品视频在线免费观看 | 亚洲精品久久久久999中文字幕 | 欧美久久久| av在线免费不卡 | 久草视频免费观 | 色爱区综合激月婷婷 | 91高清视频| 久久人人爽人人爽人人 | 国产精品国产三级国产不产一地 | 在线观看精品一区 | free,性欧美 九九交易行官网 | 激情综合国产 | 国产又粗又猛又爽又黄的视频免费 | 国产高清视频免费观看 | 成人免费视频网站在线观看 | 久青草视频在线观看 | 精品一区二区在线免费观看 | 国产午夜在线观看 | 久久精品日产第一区二区三区乱码 | 精品一区二区免费在线观看 | 亚洲三级黄 | 国产伦精品一区二区三区四区视频 | 99视频免费播放 | 日本精品在线看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 在线观看日本高清mv视频 | 最近最新中文字幕 | 中文字幕在线免费看线人 | 亚洲视频免费在线看 | 精品91久久久久 | 国产很黄很色的视频 | 日韩高清一 | 欧美日韩精品在线观看 | 激情网五月婷婷 | 久久综合给合久久狠狠色 | 激情在线免费视频 | 国产不卡在线视频 | 精品a视频 | www色av| 在线观看免费中文字幕 | 91亚色在线观看 | 国内精品久久久久久 | 国产精品99久久久久久久久 | 欧美日韩国语 | 久久精品亚洲国产 | 欧美aaa大片| 久久国产高清视频 | 中文字幕一区二区在线播放 | 五月天六月婷 | 日本丰满少妇免费一区 | www黄在线 | 国产在线观看污片 | 国产在线播放一区 | 免费看国产一级片 | 日韩精品亚洲专区在线观看 | av丝袜在线| 九九热在线视频 | 久久久久久久久久亚洲精品 | 色com| 国产一区二区中文字幕 | 狠狠操狠狠干天天操 | 国产小视频91 | 日韩区欠美精品av视频 | 日韩免费成人 | 亚洲精品国产精品国自产在线 | 日韩欧美视频一区二区三区 | 国产精品永久在线 | 色婷婷狠狠干 | 热99在线| www五月天com | 亚洲视频在线观看 | 国产精品久久久久久久久久久久久 | 亚洲一区二区三区毛片 | 天堂av在线免费观看 | 干 操 插 | 国产黄色精品视频 | 中文字幕一区二区三区久久蜜桃 | 婷婷在线视频观看 | 91av在线免费视频 | 夜夜操夜夜干 | 婷婷丁香av| 久久欧美综合 | 天天拍天天操 | 麻豆传媒一区二区 | 国产美腿白丝袜足在线av | 久久精品视频网址 | 在线免费观看视频a | 国产精品二区三区 | 日韩网站免费观看 | 成人精品久久久 | 探花视频在线版播放免费观看 | 国产热re99久久6国产精品 | 亚洲成人在线免费 | 久久久久看片 | 99久久9| 四虎影视国产精品免费久久 | 成人免费电影 | 久久狠狠干 | 亚洲国产一区在线观看 | 亚洲视频在线观看 | 久久99国产综合精品免费 | 中文字幕精品在线 | 欧美性受极品xxxx喷水 | 日韩免费视频观看 | 91麻豆精品久久久久久 | 久久激情视频 久久 | 久久成人在线视频 | 99免在线观看免费视频高清 | 999国内精品永久免费视频 | 国产一区二区三区免费在线 | 欧美大香线蕉线伊人久久 | 日本论理电影 | 久久伊人八月婷婷综合激情 | 国产一级电影免费观看 | 99精品欧美一区二区三区 | 亚洲国产精品久久 | 国产黄在线观看 | 中文国产字幕在线观看 | 欧美黑人性猛交 | 中文字幕丝袜 | 日韩欧美高清一区二区 | 久久久国产精品人人片99精片欧美一 | 免费在线观看一级片 | 中文字幕在线网址 | 欧美在线视频第一页 | 夜夜干夜夜 | 中文字幕在线视频免费播放 | 丁香五婷 | 中文字幕高清免费日韩视频在线 | 天天在线免费视频 | 国产视频导航 | 精品福利网站 | 国内精品久久久久影院一蜜桃 | 狠狠狠狠狠狠天天爱 | 日韩视频中文字幕在线观看 | 综合精品在线 | 国产精品久久人 | 国产精品美女久久久久久久网站 | 成人黄色免费观看 | 欧美另类性 | 六月天色婷婷 | 久久久国产在线视频 | 国产一区久久久 | 国产在线观看中文字幕 | 人成在线免费视频 | 国产成人精品一区二区在线观看 | 日韩a级黄色 | 欧美久久久久久久久久久 | www操操操 | 天天躁日日躁狠狠躁av中文 | 久久婷婷一区二区三区 | 色综合久久88色综合天天免费 | 国产精品美女久久久久久 | 91丨九色丨勾搭 | 91av大全 | 日韩精品一区二区三区中文字幕 | 中文国产字幕在线观看 | 制服丝袜一区二区 | 五月婷婷在线观看视频 | 综合在线亚洲 | 日韩久久午夜一级啪啪 | 欧美另类网站 | 久色小说 | 久久爱www.| 日日草夜夜操 | 性色在线视频 | 成人av影视| 国产成人在线播放 | 一区二区精品 | 欧美精品在线观看免费 | 99资源网| 日本最新高清不卡中文字幕 | 午夜精品麻豆 | 国产午夜精品理论片在线 | 91精品国产99久久久久 | 日韩精品一区二区三区外面 | 在线观看黄a | 国产最新福利 | 91视频网址入口 | 最新成人在线 | 精品黄色在线 | 国产精品久久久久久久久蜜臀 | 国产精品久久久 | 免费视频91蜜桃 | 欧美一级裸体视频 | 91精品视频一区 | 免费在线观看成人av | 五月天久久婷婷 | 欧美一级免费片 | 毛片无卡免费无播放器 | 在线亚洲成人 | 国产一线二线三线性视频 | 亚洲伊人第一页 | 精品视频在线视频 | 天天干天天想 | 尤物一区二区三区 | 狠狠躁日日躁夜夜躁av | 国产日韩精品一区二区三区在线 | 日韩一区二区三区视频在线 | 日本69hd| 六月天综合网 | 国产精彩视频一区二区 | 国产成年人av| 天天色天天操天天爽 | 91成人在线视频观看 | 在线a亚洲视频播放在线观看 | 久久久久久国产精品美女 | 欧美精品亚洲二区 | 五月婷婷黄色 | 一区二区视频在线播放 | 久久视影 | 91在线精品播放 | 不卡电影免费在线播放一区 | 九九九电影免费看 | 色片网站在线观看 | 国产视频在线一区二区 | 激情视频二区 | 一级免费片 | 久久免费黄色 | 久久免费视频5 | 国产精品不卡 | 国产一级在线免费观看 | 精品国内 | 激情文学综合丁香 | 日日弄天天弄美女bbbb | 亚洲精品午夜aaa久久久 | 久草综合在线观看 | 97av影院| 欧美在线91 | 97视频亚洲 | 国产在线高清 | 国产高清久久 | 日韩三级视频在线看 | 天天操夜夜逼 | 黄色av免费| 在线视频久 | 青青河边草观看完整版高清 | 免费欧美精品 | 亚洲美女视频在线观看 | 亚洲精品中文字幕视频 | 国产日本亚洲高清 | 江苏妇搡bbbb搡bbbb | 国产高清视频免费 | 久久午夜网| www.五月婷婷.com | 91中文视频 | 夜色资源站wwwcom | 亚洲国产视频a | 欧美精品在线一区二区 | 久久成人综合 | 五月婷婷中文网 | 久久久综合色 | 国产精品99久久久久久有的能看 | 国产自产高清不卡 | 亚洲五月婷婷 | 色在线免费观看 | av成人免费在线看 | 国产精品国产三级国产专区53 | www色av| 极品美女被弄高潮视频网站 | 久久久99精品免费观看 | 色国产精品一区在线观看 | 精品av网站 | 99在线观看 | 国产精品中文 | 亚洲天堂在线观看完整版 | 看片一区二区三区 | 国产99久| 99热精品国产一区二区在线观看 | 国产精品视频免费在线观看 | 国产精品免费视频一区二区 | 色综合天天视频在线观看 | 国产精品99蜜臀久久不卡二区 | 九九热有精品 | 91福利视频一区 | 国产一区二区视频在线播放 | 四虎在线观看精品视频 | 四虎影视国产精品免费久久 | 日本最新中文字幕 | 久久精品视频在线观看 | 91麻豆精品国产91久久久久久久久 | av在线色| 日韩欧美精品在线观看视频 | 久久深夜 | 免费在线观看日韩欧美 | 午夜精品视频在线 | 91福利免费 | 91精品国产91久久久久福利 | 天天干天天摸天天操 | 色中色资源站 | 97视频在线播放 | 国产成人精品在线播放 | 久草在线最新免费 | 91日韩精品 | 国产高清视频免费观看 | 亚洲更新最快 | 一区二区三区中文字幕在线观看 | 久久亚洲热 | 成人亚洲免费 | 久久er99热精品一区二区三区 | 亚洲精选在线 | 欧美日韩精品在线播放 | 日韩成人精品一区二区三区 | 在线观看国产www | 中文字幕123区 | 午夜av影院 | 69xx视频 | 在线免费色 | av中文字幕电影 | 在线小视频你懂得 | 日韩免费福利 | 欧美午夜精品久久久久久孕妇 | 在线观看免费av片 | 日韩精品综合在线 | 天天综合天天综合 | 色偷偷88888欧美精品久久久 | 日韩欧美高清不卡 | 国产成人精品一区二区三区网站观看 | 久久久九色精品国产一区二区三区 | 亚洲日本精品 | 久久一区二区三区国产精品 | 欧美日韩不卡一区二区 | 人人干狠狠干 | a级国产乱理论片在线观看 特级毛片在线观看 | 少妇bbb搡bbbb搡bbbb′ | 最新日韩在线观看视频 | av黄色av | 亚洲 欧美日韩 国产 中文 | 久久九九网站 | 99视频在线免费 | 色综合a| 超级碰碰碰免费视频 | 免费观看十分钟 | 精品国产成人在线影院 | 中文字幕黄色网址 | 亚洲精品视频偷拍 | 91九色蝌蚪视频网站 | www.xxx.性狂虐 | 免费a视频在线观看 | 亚洲视频在线观看免费 | 久久精品亚洲一区二区三区观看模式 | 香蕉久久久久 | 成人一级电影在线观看 | 国产999| 美女视频又黄又免费 | 国产精品久久久久久久久久久久午 | 亚洲黄色a| 色视频 在线| 美女视频黄,久久 | 中文字幕在线观看完整 | 成人97人人超碰人人99 | 久久视影 | 国产亚洲高清视频 | 国产毛片久久久 | 丝袜美腿在线 | 激情欧美一区二区三区免费看 | 91免费看片黄 | 精品99久久久久久 | 成人av中文字幕 | 精品国产三级 | 亚洲精品国偷拍自产在线观看 | 国产精品一区久久久久 | 91热爆视频 | 丝袜美腿av| 免费观看性生活大片3 | 久久精品2 | 99这里精品 | 日韩免费高清 | 国产精品少妇 | 视频三区| 国产精品美女久久久久久2018 | 国产精品入口a级 | 国产中文字幕91 | 久久人人添人人爽添人人88v | 国产精品1000 | 久久国产精品久久精品 | 在线视频精品播放 | 久久在线精品视频 | 一区二区三区四区五区在线视频 | 91麻豆精品一区二区三区 | 91久草视频 | 亚洲国产激情 | 国产日韩精品一区二区 | 四虎永久免费在线观看 | 亚洲美女在线一区 | 久久九九久久精品 | 日本爱爱片 | 视频一区二区在线 | 日韩在线短视频 | 色综合色综合色综合 | 人人澡人人舔 | 91精品成人 | 国产精品久久久久久久久大全 | 国产在线一卡 | 91视频午夜 | 992tv在线成人免费观看 | 亚洲va在线va天堂va偷拍 | 亚洲情影院 | 黄色影院在线观看 | 国产精品国产三级国产不产一地 | 99国产免费网址 | 中文字幕观看视频 | 色资源网免费观看视频 | 亚洲专区一二三 | 69精品人人人人 | 97视频在线观看成人 | 成人午夜电影在线观看 | 国产一级片视频 | 亚洲精品动漫久久久久 | 99久久综合国产精品二区 | 婷婷 中文字幕 | 久久国产精品久久久久 | 超碰九九 | 日韩中文久久 | 超碰97人人干 | 国产精品va在线 | 国产不卡免费av | 亚洲精品中文字幕视频 | 久久爱导航 | 国产成人99久久亚洲综合精品 | 色av资源网| 欧美日韩在线视频一区二区 | 欧美日韩久久一区 | 91完整版| av 在线观看 | 亚洲国产合集 | 午夜久久福利 | 日韩区视频 | 最新久久免费视频 | 日韩一区在线播放 | 亚洲精品激情 | 特级西西444www大胆高清无视频 | 91最新视频在线观看 | av天天澡天天爽天天av | 国产精品成人免费精品自在线观看 | 99久久久国产精品免费观看 | 色悠悠久久综合 | 久久精视频| 色妞色视频一区二区三区四区 | 欧美日韩精品在线播放 | 成人黄色在线观看视频 | 国产成人一区二区啪在线观看 | 久久香蕉国产精品麻豆粉嫩av | 中文字幕视频播放 | 日韩簧片在线观看 | 激情伊人五月天 | 色播五月婷婷 | 国产91精品看黄网站 | 91精品国产福利在线观看 | 久久国产精品免费视频 | 日韩免费福利 | 欧美整片sss| 国产在线观看免费观看 | 视频一区二区三区视频 | 在线观看视频免费播放 | 久久精品三 | 亚洲欧美成人 | 激情综合啪 | 亚洲欧洲xxxx | 婷婷色在线 | 成人午夜电影免费在线观看 | 久久99精品波多结衣一区 | 久久久亚洲麻豆日韩精品一区三区 | 久久久99国产精品免费 | 欧美日韩高清免费 | 亚洲综合成人婷婷小说 | 西西444www大胆高清视频 | 99999精品视频 | 色伊人网 | 欧美aaaxxxx做受视频 | 丁香激情五月婷婷 | 日韩av免费观看网站 | 亚洲国产精彩中文乱码av | 久久精品国产成人 | 97免费在线观看视频 | 欧美激情视频免费看 | 国产精品 中文字幕 亚洲 欧美 | 亚洲精品久久在线 | 国产九色视频在线观看 | 国产成人久久av | 国产精品免费久久久久久久久久中文 | 97电影院在线观看 | 亚洲精品人人 | 天天操天天射天天爽 | 在线你懂的视频 | 国产精品一区二区三区免费视频 | 日本高清dvd | 亚洲高清视频在线 | 日韩丝袜视频 | 亚洲精品资源在线 | 国产成人久久久77777 | 国内外成人免费在线视频 | 免费观看的黄色片 | 手机看片国产日韩 | 久久久久久久久久亚洲精品 | 天天操一操 | 91在线看黄 | 色婷婷久久久综合中文字幕 | 久精品一区 | 黄网站免费久久 | 久久理论电影网 | 日韩超碰在线 | 91视频最新网址 | 人人狠| 在线国产激情视频 | 在线小视频 | 黄色特级一级片 | 国产中文字幕一区二区三区 | 狠狠干夜夜操天天爽 | 国产又粗又猛又爽又黄的视频先 | 欧美精品一区二区蜜臀亚洲 | 伊人春色电影网 | 午夜视频免费播放 | 久久超级碰 | 亚州av免费 | 欧美中文字幕第一页 | 免费观看视频黄 | 国产资源在线视频 | 亚洲成人精品av | 免费国产在线精品 | 久久免费在线观看视频 | av在线精品 | 五月天欧美精品 | 中国成人一区 | 国产一线天在线观看 | 五月天色中色 | 国产精品久久嫩一区二区免费 | 国产日韩欧美中文 | 在线看国产视频 | 日韩av一卡二卡三卡 | 亚洲精品九九 | 久久国产精品99久久久久久老狼 | 欧美日韩国产精品一区二区 | 美女视频黄免费 | 欧美巨大荫蒂茸毛毛人妖 | 成 人 黄 色 片 在线播放 | 最新的av网站 | 91成人在线观看喷潮 | 狠狠操夜夜操 | 久久a视频 | 91免费视频网站在线观看 | 成年人免费在线播放 | 国产福利av | 亚洲va欧洲va国产va不卡 | 成人a大片 | 精品免费视频123区 午夜久久成人 | 日本久久中文 | 在线黄色国产电影 | 69久久99精品久久久久婷婷 | 三三级黄色片之日韩 | 色五月激情五月 | 成人久久久电影 | 久草影视在线观看 | 久久成人免费视频 | 午夜久久久精品 | 免费看一级黄色大全 | 91亚色视频在线观看 | 国产视频观看 | 色五月激情五月 | 中国一级片在线观看 | 91精品国产92久久久久 | 亚洲精品成人在线 |