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

一動(dòng)不如一靜

C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
  20 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

#

前段時(shí)間用了ACE_TP_Reactor做了一個(gè)東西,但是對(duì)這塊東西不是很有底,所以借著假期仔細(xì)的看了一下這一塊的東西,又上網(wǎng)查了一下相關(guān)的資料。

在Addison-Wesley - C++NetworkProgrammingVol2的4.3 The ACE_TP_Reactor Class中有這樣幾句話,讓我足足想了一天。

1.Multiple threads running an ACE_TP_Reactor event loop can process events concurrently on different handles
2.They can also dispatch timeout and I/O callback methods concurrently on the same event handler
3.The only serialization in the ACE_TP_Reactor occurs when I/O events occur concurrently on the same handle
4.After a thread obtains a set of active handles from select(), the other reactor threads dispatch from that handle set instead of calling select() again

其實(shí)上面的3句話主要表達(dá)這樣的幾層含義
1.并行處理不同handle上的事件
2.并行處理同一event handler上的超時(shí)回調(diào)函數(shù)和I/O回調(diào)函數(shù)
3.多個(gè)線程串行處理同一個(gè)handle上的I/O事件。
4.雖然TP_Reactor是用leader/follow模式輪流調(diào)用select,但是如果一個(gè)select()獲得了多個(gè)激活的handle,那么其他的線程會(huì)分發(fā)這些handle ,而不是去再次調(diào)用select.
?(這點(diǎn)還沒(méi)有想通,也沒(méi)有看見(jiàn)是如何實(shí)現(xiàn)的?)

“多個(gè)線程串行處理同一個(gè)handle上的I/O事件”
??? ?? 這個(gè)是如何達(dá)到的呢?ACE源碼中,當(dāng)處理I/O事件的時(shí)候,會(huì)將HANDLE掛起,使得不再對(duì)該HANDLE做事件偵聽(tīng)。來(lái)達(dá)到同一個(gè)handle上的I/O事件是被多個(gè)線程串行地處理。

"并行處理同一event handler上的超時(shí)回掉函數(shù)和I/O回調(diào)函數(shù)"
??? ?? 這樣好像就比較麻煩了。因?yàn)檫@就意味著TP_Reactor只保證同一個(gè)handle下不會(huì)有多線程同時(shí)調(diào)用I/O事件,但是卻有可能同時(shí)調(diào)用超時(shí)回調(diào)函數(shù)和I/O回調(diào)函數(shù)。如果在這兩個(gè)函數(shù)中有對(duì)數(shù)據(jù)的訪問(wèn)和操作,這就意味著需要有鎖的引入。例外,如果在定時(shí)器處理中,超過(guò)定時(shí)的事件間隔,就會(huì)有令一個(gè)線程再次調(diào)用定時(shí)器的處理函數(shù),一下子引入了很多同步的問(wèn)題。如何解決這個(gè)問(wèn)題呢?

方法一:

??? ??? ??? 更改ACE的源碼,象處理socket事件一樣,在處理定時(shí)事件的時(shí)候,也把HANDLE掛起。來(lái)自http://cpunion.cnblogs.com/archive/2005/08/09/210941.html

int
ACE_TP_Reactor::handle_timer_events?(
int?&?/*event_count*/,
?????????????????????????????????????ACE_TP_Token_Guard?
&guard)
{
??
//?Get?the?current?time
??ACE_Time_Value?cur_time?(this->timer_queue_->gettimeofday?()?+
???????????????????????????
this->timer_queue_->timer_skew?());

??
//?Look?for?a?node?in?the?timer?queue?whose?timer?<=?the?present
??
//?time.
??ACE_Timer_Node_Dispatch_Info?info;

??
if?(this->timer_queue_->dispatch_info?(cur_time,
?????????????????????????????????????????info))
????{
????????
//?********?fixed?by?lijie?***********
????????if?(info.type_->get_handle?()?!=?ACE_INVALID_HANDLE)
????????{
????????????
if?(this->is_suspended_i?(info.type_->get_handle?()))
????????????????
return?0;

????????????
this->suspend_handler?(info.type_->get_handle?());
????????}
????????
//?********?end?**********************

??????
const?void?*upcall_act?=?0;

??????
//?Preinvoke.
??????this->timer_queue_->preinvoke?(info,
?????????????????????????????????????cur_time,
?????????????????????????????????????upcall_act);

??????

??????
//?Release?the?token?before?dispatching?notifies
??????guard.release_token?();

??????
//?call?the?functor
??????this->timer_queue_->upcall?(info,
??????????????????????????????????cur_time);

??????
//?Postinvoke
??????this->timer_queue_->postinvoke?(info,
??????????????????????????????????????cur_time,
??????????????????????????????????????upcall_act);

??????
//?We?have?dispatched?a?timer
??????return?1;
????}

??
return?0;
}

handle_timer處理完以后,返回以前,加上這句話
this->reactor ()->resume_handler (this->get_handle ());

當(dāng)然別忘了為Handler編寫(xiě)get_handle()函數(shù):
ACE_HANDLE?Test_Handler::get_handle?()?const
{
????
return?this->peer?().get_handle?();
}


方法二:
??? ?? ?? ?? 利用ACE_PipeACE_Message_Queue把所有的事件都排隊(duì)到同一個(gè)I/O HANDLE上去,再由ACE_TP_Reactor通過(guò)多個(gè)線程順序串行地觸發(fā)我們舊的event_handler來(lái)處理這些已經(jīng)排好隊(duì)的事件/消息。我比較贊成用這樣方法。該方法來(lái)自:http://blog.csdn.net/zhdaniel/archive/2006/06/29/850888.aspx
???

??? ??


方法三:
??? ?? ?? ?? ^_^干脆就不要對(duì)同一個(gè)event? handler注冊(cè)I/O事件和其他事件。





posted @ 2006-10-07 11:29 一動(dòng)不如一靜 閱讀(3122) | 評(píng)論 (1)編輯 收藏

來(lái)源:
http://www.ociweb.com/products/mpc/faq.html#006

Q :當(dāng)生成工程文件名稱的時(shí)候,可以改變工程文件的名稱嗎?
A:當(dāng)用MPC生成工程文件的時(shí)候,可以用-name_modifier 選項(xiàng)來(lái)修改工程文件名稱.如果你也想修改工程的名稱,可以增加-apply_project.如下:
mwc.pl -static -type vc6 -name_modifier *_Static -apply_project
如果用了這些選項(xiàng),所有的工作空間,工程文件和工程名都以_Static結(jié)尾.

Q:怎樣用MPC在每個(gè)目錄生成一個(gè)工作空間?
A:當(dāng)運(yùn)行mwc.pl的時(shí)候加上-hierarchy選項(xiàng).對(duì)于所有基于'make'的工作空間是默認(rèn)的.

Q:怎樣告訴MPC在尋找mwc和mpc文件時(shí),不要尋找某個(gè)特殊的路徑?
A:-exclude可以用于這個(gè)目的.但是這個(gè)路徑必須是一個(gè)相對(duì)于MPC運(yùn)行的路徑.如:
mwc.pl -exclude this_dir,this_dir_too,and_another_dir

Q:怎樣在我的工作空間中用-value_template
A:在mwc文件中,你能用很多mwc.pl的命令行選項(xiàng).要加上cmdline關(guān)鍵字.如果在命令行中需要有空格,必須包含在""之中.如:
workspace {
? // Set the command line value to change the configurations with vc6, vc71 and vc8
? cmdline += -value_template "configurations='MFC Release' 'MFC Debug'"
}

Q:有沒(méi)有辦法在Solaris,工程中包含一個(gè)文件,但是在Linux上不包含該文件呢?
A:你可以用feature定義一個(gè)base工程.如下:
// config/default.features
solaris_only = 0


// some_base.mpb
feature(solaris_only) {
? Source_Files {
??? source1.cpp
??? source2.cpp
? }
}?


// your_project.mpc
project: some_base {
? Source_Files {
??? source3.cpp
??? source4.cpp
? }
}?

Q:可不可以一些選項(xiàng)用于某客戶文件,而另外一些用于其他的客戶文件呢?
A:你可以為用戶的輸入文件創(chuàng)建多個(gè)部分.如下:
project: foo {
FOO_Files {
foo.file
}

FOO_Files {
commandflags += -QR
bar.file
}
}
Q:有沒(méi)有辦法表明編譯選項(xiàng)?
A:可以用'specific' .如:
project {

? specific(make) {
??? compile_flags += -fcheck-new
? }

? specific(vc71) {
??? compile_flags += /wd4103
? }
}?

Q:在一個(gè)工作空間中,想有靜態(tài)和動(dòng)態(tài)的工程?
A:在mwc文件中,建立一個(gè)域范圍.增加-static到命令行選項(xiàng).如:
workspace {
? // These projects will be static
? some_scope_name {
??? cmdline += -static
??? my_projects_dir??
??? my_other_projects_dir
? }

? // Anything outside the scope will have the command line options provided at the start of mwc.pl
? another_dir
}

Q:有沒(méi)有方法在mpc文件中表明這個(gè)庫(kù)必須是靜態(tài)庫(kù),其他的庫(kù)不能把它用做動(dòng)態(tài)庫(kù)?
A:設(shè)置靜態(tài)庫(kù)名,而動(dòng)態(tài)庫(kù)名為空.
project {
? sharedname =
? staticname = foo
}

Q:MPC添加d.lib到所有的庫(kù).有沒(méi)有辦法關(guān)掉它?
A:在mpc文件中用'lit_libs'代替libs

Q:為vc6和vc71生成靜態(tài)工程,可是卻沒(méi)有工程的依賴?
A:可以通過(guò)設(shè)置MPC_DEPENDENCY_COMBINED_STATIC_LIBRARY環(huán)境變量,強(qiáng)迫MPC生成工程間相互依賴的的靜態(tài)庫(kù).

Q:有沒(méi)有方法可以強(qiáng)制在靜態(tài)庫(kù)名后有's'但是debug版本沒(méi)有'd'
A:是的,你能設(shè)置lib_modifier,用這個(gè)配置座位域修改器.在下面的例子中,假設(shè)-static選項(xiàng)已經(jīng)傳遞給了MPC
project {
? // Override the values of 's' and 'sd' respectively.
? specific {
??? Release::lib_modifier =
??? Debug::lib_modifier = d
? }
}?

Q:由MPC生成的VC71工程,用release ,生成的執(zhí)行文件在release目錄中.而debug是在"."目錄中,怎樣才能把執(zhí)行文件放在debug目錄中. ???
A: 增加改行到MPC工程中
project {???????????????????
? specific(nmake, vc6, vc7, vc71, vc8) {
??? Debug::install = Debug
? }
}

Q:如何生成支持MFC的版本
A:MPC的命令行增加下面一行
-value_template "configurations='MFC Release' 'MFC Debug'"
這個(gè)可以用于 em3, nmake, vc6, vc7, vc71 和 vc8 工程類(lèi)型的配置
提醒一下,別忘了創(chuàng)建config.h文件,內(nèi)容類(lèi)似如下:
#include "config-win32.h"
#include "config-win32-msvc-7.h"



posted @ 2006-06-24 10:18 一動(dòng)不如一靜 閱讀(1392) | 評(píng)論 (1)編輯 收藏

??? ?? ACE_WFMO_Reactor允許多個(gè)線程并發(fā)的調(diào)用handle_events(),這個(gè)能力的增加使得它的設(shè)計(jì)變的復(fù)雜,并且引入了一些同基于select的反應(yīng)器不同的地方.不同點(diǎn)如下:
  • 注冊(cè)改變的協(xié)調(diào).已注冊(cè)句柄集合的每一個(gè)改變,將會(huì)影響到所有執(zhí)行事件循環(huán)的線程.在沒(méi)有同步的情況下允許這些改變的發(fā)生,會(huì)導(dǎo)致丟失事件,或不正確,不合法的句柄被分發(fā).為了在多線程的情況下,正確的處理注冊(cè)發(fā)生改變的情況,ACE_WFMO_Reactor維持了三個(gè)句柄信息集合對(duì)象.
  1. 用作事件偵查和分發(fā)的當(dāng)前句柄
  2. 新句柄, 除了當(dāng)前句柄集合,新句柄也在等待
  3. 掛起句柄,是當(dāng)前句柄中掛起的句柄
當(dāng)需要改變已注冊(cè)的句柄時(shí),(例如:注冊(cè),移除,掛起和恢復(fù)一個(gè)事件處理器),要記住句柄,事件處理器,事件類(lèi)型信息,和相關(guān)信息的記錄.下一個(gè)完成handle_events的線程會(huì)注意到這個(gè)改變,獲取reactor的鎖,等待所有其他正在運(yùn)行handle_events的線程完成.為了能讓這些線程及時(shí)的完成,等待的線程發(fā)送一個(gè)內(nèi)部事件,該內(nèi)部事件是分發(fā)句柄集合的一部分.喚醒所有阻塞在WaitForMultipleObjects的線程.這個(gè)時(shí)候,所有的事件處理線程將會(huì)阻塞在等待變化的發(fā)生.當(dāng)原始的線程完成必要的信息和句柄改變后,釋放reactor的鎖.所有的事件處理線程重新開(kāi)始在更新后的句柄集合上進(jìn)行等待,分離和分發(fā).
  • 推遲事件處理器的清除.ACE_WFMO_Reactor注冊(cè)改變的延遲引入了一些與基于select()的反應(yīng)器的不同之處.當(dāng)hanle_*()方法返回-1或者ACE_Reactor::remove_handler()被事件處理器調(diào)用時(shí),它推遲事件處理器的移除和handle_close()鉤子函數(shù)的回調(diào),直到上面說(shuō)講的注冊(cè)改變發(fā)生.所以一個(gè)應(yīng)用在請(qǐng)求ACE_WFMO_Reactor移除一個(gè)事件處理器之后,不能立即刪除該事件處理器,否則reator后來(lái)調(diào)用的handle_close()方法會(huì)分發(fā)一個(gè)無(wú)效的指針.
posted @ 2006-06-23 20:48 一動(dòng)不如一靜 閱讀(818) | 評(píng)論 (0)編輯 收藏

1.修飾類(lèi)的數(shù)據(jù)成員
const數(shù)據(jù)成員只是在某個(gè)對(duì)象的生命周期內(nèi)是常量.如果創(chuàng)建多個(gè)對(duì)象,那么每個(gè)對(duì)象的const數(shù)據(jù)成員可以不一樣.所以,不能在類(lèi)聲明中初始化const數(shù)據(jù)成員.如:
class A
{
???const int size = 100;//?錯(cuò)誤
???int array[size];//錯(cuò)誤,未知的數(shù)組大小
}
const類(lèi)數(shù)據(jù)成員,只能在類(lèi)的構(gòu)造函數(shù)的初始化列表中進(jìn)行.要想建立整個(gè)類(lèi)都是恒定的常量的數(shù)據(jù),可以用類(lèi)中的枚舉.如:
class A
{
enum {size1 = 100, size2 = 200};
int array[size1];
}

2.只有聲明為const的成員函數(shù)才能被一個(gè)const對(duì)象調(diào)用

3.在另一連接文件中引用const常量.
extern const int i

4.對(duì)于const對(duì)象,c++既允許對(duì)其進(jìn)行靜態(tài)初始化,也允許對(duì)其進(jìn)行動(dòng)態(tài)初始化.const對(duì)象具有從構(gòu)造函數(shù)完成到析構(gòu)函數(shù)執(zhí)行之前的不變性.

5.常量與數(shù)組的組合有什么特殊嗎?
我們給出下面的代碼:
const int size[3]={10,20,50};
int array[size[2]];
編譯通不過(guò)!為什么呢?const可以用于集合,但編譯器不能把一個(gè)集合存放在它的符號(hào)表里,所以必須分配內(nèi)存。在這種情況下,const意味著“不能改變的一塊存儲(chǔ)”。然而,其值在編譯時(shí)不能被使用,因?yàn)榫幾g器在編譯時(shí)不需要知道存儲(chǔ)的內(nèi)容。自然,作為數(shù)組的大小就不行了
你再看看下面的例子:
class A
{
public:
A(int i=0):test[2]({1,2}) {} file://你/認(rèn)為行嗎?
private:
const int test[2];
};
C++標(biāo)準(zhǔn)有一個(gè)規(guī)定,不允許無(wú)序?qū)ο笤陬?lèi)內(nèi)部初始化,數(shù)組顯然是一個(gè)無(wú)序的,所以這樣的初始化是錯(cuò)誤的!對(duì)于他,只能在類(lèi)的外部進(jìn)行初始化,如果想讓它通過(guò),只需要聲明為靜態(tài)的,然后初始化。
這里我們看到,常量與數(shù)組的組合沒(méi)有什么特殊!一切都是數(shù)組惹的禍!

(7)什么情況下為const分配內(nèi)存?
以下是我想到的可能情況,當(dāng)然,有的編譯器進(jìn)行了優(yōu)化,可能不分配內(nèi)存。
A、作為非靜態(tài)的類(lèi)成員時(shí);
B、用于集合時(shí);
C、被取地址時(shí);
D、在main函數(shù)體內(nèi)部通過(guò)函數(shù)來(lái)獲得值時(shí);
E、const的 class或struct有用戶定義的構(gòu)造函數(shù)、析構(gòu)函數(shù)或基類(lèi)時(shí);。
F、當(dāng)const的長(zhǎng)度比計(jì)算機(jī)字長(zhǎng)還長(zhǎng)時(shí);
G、參數(shù)中的const;
H、使用了extern時(shí)。

(8)與static搭配會(huì)不會(huì)有問(wèn)題?
假設(shè)有一個(gè)類(lèi):
class A
{
public:
......
static void f() const { ......}
......
};
我們發(fā)現(xiàn)編譯器會(huì)報(bào)錯(cuò),因?yàn)樵谶@種情況下static不能夠與const共存!因?yàn)閟tatic沒(méi)有this指針,但是const修飾this指針.

(9)如何修改常量?
有時(shí)候我們卻不得不對(duì)類(lèi)內(nèi)的數(shù)據(jù)進(jìn)行修改,但是我們的接口卻被聲明了const,那該怎么處理呢?我對(duì)這個(gè)問(wèn)題的看法如下:
1)標(biāo)準(zhǔn)用法:mutable
class A
{
public:
A(int i=0):test(i) { }
void Setvalue(int i)const { test=i; }
private:
mutable int test; file://這/里處理!
};
2)強(qiáng)制轉(zhuǎn)換:const_cast
class A
{
public:
A(int i=0):test(i) { }
void Setvalue(int i)const
{ const_cast <int>(test)=i; }//這里處理!
private:
int test;
};

(10)最后我們來(lái)討論一下常量對(duì)象的動(dòng)態(tài)創(chuàng)建。
既然編譯器可以動(dòng)態(tài)初始化常量,就自然可以動(dòng)態(tài)創(chuàng)建,例如:
const int* pi=new const int(10);
這里要注意2點(diǎn):
1)const對(duì)象必須被初始化!所以(10)是不能夠少的。
2)new返回的指針必須是const類(lèi)型的。
那么我們可不可以動(dòng)態(tài)創(chuàng)建一個(gè)數(shù)組呢?
答案是否定的,因?yàn)閚ew內(nèi)置類(lèi)型的數(shù)組,不能被初始化。
posted @ 2006-06-14 17:49 一動(dòng)不如一靜 閱讀(444) | 評(píng)論 (0)編輯 收藏

c++中的引用又稱為別名.

1. 引用必須被初始化,即必須指向一個(gè)對(duì)象.
?int nTemp = 10;
int &refTemp = nTemp;

2.初始化之后就不能再指向其他對(duì)象.如果用一個(gè)引用給另一個(gè)引用賦值,那么被改變的是被引用的對(duì)象而不是引用本身.
int nOther = 20;
refTemp = nOther; //此時(shí)nTemp中的值為20,但是&refTemp和&nTemp是相同的.

3.用const修飾的引用可以用不同類(lèi)型的對(duì)象初始化(只要能從一種類(lèi)型轉(zhuǎn)換到另外一種類(lèi)型),也可以是不可尋址的值.能夠這樣的原因是因?yàn)?編譯器做了手腳.
double dTemp = 1024;
const int &refTemp = dTemp; //&dTemp和&refTemp是不同的.

編譯之后成為:
double dTemp = 1024;
int nTemp = dTemp;
const int &refTemp = nTemp;

4.不允許非const引用指向需要臨時(shí)對(duì)象的對(duì)象或值.


posted @ 2006-06-14 15:55 一動(dòng)不如一靜 閱讀(462) | 評(píng)論 (0)編輯 收藏

兩本書(shū)的錯(cuò)誤的更新
http://www.cs.wustl.edu/~schmidt/ACE/book1/Errata.txt

http://www.cs.wustl.edu/~schmidt/ACE/book2/Errata.txt

英文討論組
http://groups.google.com/group/comp.soft-sys.ace

http://groups.google.com/group/comp.soft-sys.ace?lnk=oa

中文討論區(qū)
http://forum.huihoo.com/forumdisplay.php?fid=125

相關(guān)文檔
http://www.cs.wustl.edu/~schmidt/ACE.html

有關(guān)mpc問(wèn)題
http://www.ociweb.com/products/mpc/faq.html#021

源碼中標(biāo)記的含義
http://www.stack.nl/~dimitri/doxygen/commands.html
posted @ 2006-06-13 15:23 一動(dòng)不如一靜 閱讀(641) | 評(píng)論 (0)編輯 收藏

???????? #include <iostream>
???????? #include <string>

???????? std::cin.widen(1024);

???????? for (; ;)
???????? {
?????????????? std::string user_input;
?????????????? std::getline(std::cin, user_input, '\n');
??????????????
?????????????? if? (!std::cin || std::cin.eof()) break;
?????????????
?????????????? std::cerr << user_input;
?????????
???????? }

posted @ 2006-06-13 10:01 一動(dòng)不如一靜 閱讀(307) | 評(píng)論 (0)編輯 收藏

這篇內(nèi)容來(lái)自c++網(wǎng)絡(luò)編程卷1 第七章 ACE同步事件分離封裝.

????????????????????????????????????????????????????????????? Sidebar 14: Motivation for Nonblocking Acceptors

???????? 當(dāng)把一個(gè)Acceptor socket傳遞給select(),如果收到一個(gè)鏈接,那么該socket被標(biāo)識(shí)為激活狀態(tài).很多服務(wù)器利用這個(gè)事件去表明可以調(diào)用accept(),不會(huì)引起阻塞.不幸的是,有來(lái)自TCP/IP異步行為的資源競(jìng)爭(zhēng).在實(shí)際中,select()之后就表明一個(gè)acceptor socket是激活的(但是在accept()調(diào)用之前),client可以關(guān)閉它的連接,一旦accept()阻塞潛在的掛起整個(gè)進(jìn)程.為了避免這個(gè)問(wèn)題,acceptor socket當(dāng)和select()一起使用的時(shí)候,應(yīng)該一直被設(shè)置為非阻塞的模式.在ACE中,這步工作很方便,只要傳遞ACE_NONBLOCK標(biāo)識(shí)給enable()方法就可以了.enable()方法是ACE_IPC_SAP提供的,所以ACE_SOCK_Acceptor也擁有.
posted @ 2006-06-12 11:18 一動(dòng)不如一靜 閱讀(624) | 評(píng)論 (0)編輯 收藏

1.最好先用ACE自身的例子,測(cè)試所編庫(kù)的正確性.
2.確保ACE.lib或ACEd.lib能正確的鏈接到工程中.
3.如果出現(xiàn)"__declspec(dllimport) int __cdecl ace_os_main_i"字樣的鏈接錯(cuò)誤,可以考慮加上#include "ace/OS_main.h"
posted @ 2006-06-11 23:18 一動(dòng)不如一靜 閱讀(26332) | 評(píng)論 (5)編輯 收藏

在類(lèi)中聲明成員方法的時(shí)候,只有純虛函數(shù)才可以不用實(shí)現(xiàn).
虛函數(shù)必須實(shí)現(xiàn),否則會(huì)出現(xiàn)error LNK2001的錯(cuò)誤.

posted @ 2006-06-11 23:06 一動(dòng)不如一靜 閱讀(442) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共2頁(yè): 1 2 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品一区二区久久精品| 亚洲第一在线视频| 欧美午夜精品久久久久久孕妇| 开心色5月久久精品| 久久人人97超碰国产公开结果| 久久国内精品视频| 久久婷婷成人综合色| 免费永久网站黄欧美| 欧美片网站免费| 国产老肥熟一区二区三区| 黄色精品免费| 99精品欧美一区二区蜜桃免费| 在线综合亚洲欧美在线视频| 午夜精品一区二区三区电影天堂 | 亚洲一卡久久| 欧美一区二区三区在线观看视频| 久久男人av资源网站| 欧美精品午夜| 国产一区二区三区日韩欧美| 亚洲国产片色| 久久国产一二区| 亚洲第一成人在线| 国产欧美精品xxxx另类| 欧美激情一二区| 久久久久久久国产| 欧美精品九九99久久| 国产精品一区二区你懂得| 黄色一区三区| 亚洲欧美综合另类中字| 亚洲国产精品高清久久久| 亚洲一区二区四区| 欧美国产一区二区| 国产一区二区欧美| 亚洲午夜视频在线| 欧美激情在线免费观看| 欧美一区=区| 国产精品国产三级国产a| 亚洲国产精品一区二区尤物区| 亚洲欧美视频在线| 亚洲久久一区| 欧美精品黄色| 亚洲欧洲一区二区在线观看| 久久国产精品亚洲va麻豆| 日韩视频免费| 欧美黄色日本| 亚洲精品美女久久7777777| 另类成人小视频在线| 欧美一区二区三区视频免费| 国产精品a级| 一区二区三区视频在线| 亚洲欧洲一区二区三区在线观看| 老**午夜毛片一区二区三区| 国产一级揄自揄精品视频| 午夜视频一区在线观看| 亚洲视频导航| 国产精品一二三四区| 午夜久久美女| 亚洲欧美卡通另类91av| 国产精品尤物福利片在线观看| 亚洲性图久久| 国产精品99久久久久久久久| 欧美午夜寂寞影院| 欧美一区=区| 久久精品视频导航| 一色屋精品视频免费看| 农夫在线精品视频免费观看| 快播亚洲色图| 99国产精品久久久| 99v久久综合狠狠综合久久| 欧美日韩国产电影| 亚洲女爱视频在线| 香蕉成人久久| **欧美日韩vr在线| 亚洲国产精品黑人久久久| 欧美日韩伦理在线免费| 亚洲主播在线观看| 欧美一级在线视频| 亚洲高清网站| 一区二区三区偷拍| 黄网站免费久久| 亚洲国产欧美一区| 国产精品美女久久久久久2018| 亚洲三级免费| 夜夜爽夜夜爽精品视频| 夜夜夜久久久| 国内精品美女av在线播放| 欧美国产日本高清在线| 欧美精品导航| 久久精品在线| 欧美日韩福利在线观看| 久久精品成人| 欧美日韩a区| 欧美资源在线| 欧美福利一区| 久久精品91| 欧美日韩第一区日日骚| 久久精品五月| 欧美喷水视频| 欧美ab在线视频| 国产精品亚洲综合色区韩国| 欧美二区在线播放| 国产精品入口夜色视频大尺度 | 毛片一区二区三区| 亚洲一区欧美激情| 久久午夜色播影院免费高清| 一区二区国产在线观看| 久久久久久久综合日本| 亚洲一区二区三区涩| 免费成人在线视频网站| 久久精品国产久精国产一老狼| 欧美日本视频在线| 欧美成人首页| 狠狠色狠狠色综合日日小说| 亚洲在线观看免费视频| 一区二区三区高清不卡| 麻豆精品精华液| 久久视频这里只有精品| 国产精品羞羞答答xxdd| a4yy欧美一区二区三区| 亚洲精品美女免费| 蜜桃视频一区| 欧美国产精品久久| 亚洲成人在线视频播放| 久久超碰97人人做人人爱| 亚洲欧美日韩国产中文在线| 欧美精品国产一区二区| 亚洲黄色av| 亚洲精品美女| 欧美精品一级| 亚洲精品一二区| a4yy欧美一区二区三区| 欧美精品免费视频| 亚洲美女电影在线| 亚洲私人黄色宅男| 欧美视频在线观看| 在线视频一区观看| 久久岛国电影| 国内精品久久久久久影视8 | 欧美视频在线不卡| 亚洲在线国产日韩欧美| 亚洲欧美日韩精品久久亚洲区| 欧美体内she精视频| 亚洲午夜电影在线观看| 久久av一区| 亚洲春色另类小说| 久久国产精品第一页| 国产精品视频一| 亚洲精品一二区| 亚洲一区二区三区四区中文| 国产精品高潮呻吟久久av无限| 在线视频你懂得一区| 欧美一区二区三区视频免费播放| 国产日韩欧美综合一区| 久久香蕉国产线看观看av| 欧美韩国日本一区| 在线亚洲一区二区| 国产亚洲一区二区三区在线播放 | 亚洲激情欧美| 中文一区二区在线观看| 国产日韩欧美在线视频观看| 久久久久网站| a4yy欧美一区二区三区| 久久精品最新地址| 亚洲精品久久久久中文字幕欢迎你 | 亚洲一品av免费观看| 久久综合色天天久久综合图片| 亚洲精品五月天| 国产女人aaa级久久久级| 久久久久久黄| 一区二区三区|亚洲午夜| 久久久久久日产精品| 99国产精品一区| 国产专区精品视频| 欧美日韩日日骚| 久久九九有精品国产23| 99综合在线| 亚洲国产精品va在线看黑人动漫 | 亚洲欧美日韩综合aⅴ视频| 美女视频黄a大片欧美| 亚洲无线一线二线三线区别av| 国内精品久久久久影院色| 欧美日韩精品综合在线| 久久综合给合久久狠狠狠97色69| 一区二区三区视频观看| 欧美国产亚洲另类动漫| 久久国产乱子精品免费女 | 欧美gay视频| 欧美一级大片在线观看| 日韩视频国产视频| 亚洲高清在线精品| 国产综合激情| 国产欧美亚洲视频| 欧美体内谢she精2性欧美| 欧美成人午夜免费视在线看片| 欧美一区二区三区视频在线观看| 一区二区免费在线观看| 亚洲区欧美区| 亚洲肉体裸体xxxx137| 欧美顶级大胆免费视频| 免费欧美在线|