• <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>

            socketref,再見(jiàn)!高德

            https://github.com/adoggie

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            #

            #ifndef _BT_THREAD_H
            #define _BT_THREAD_H

            #include <windows.h>

            class btworkThread{
            public:
            ?? ?btworkThread( void(*entry)(btworkThread* ,void*),void* user){?? ??? ?
            ?? ??? ?_entry = entry;?? ??? ?
            ?? ??? ?_param = user;
            ?? ??? ?_thandle = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)btworkThread::run,user,NULL,&_tid);
            ?? ?}
            ?? ?void?? ?stop(){
            ?? ??? ?_loop = false;
            ?? ?}
            ?? ?void?? ?wait(){
            ?? ??? ?while(!_end){
            ?? ??? ??? ?Sleep(20);
            ?? ??? ?}
            ?? ??? ?Sleep(20);? // ensure that thread has terminated
            ?? ?}
            ?? ?void?? ?stopAndWait(){
            ?? ??? ?stop();wait();
            ?? ?}
            ?? ?bool?? ?loop(){
            ?? ??? ?return _loop;
            ?? ?}
            ?? ?void?? ?code_begin(){
            ?? ??? ?_loop = true; _begin = true;_end=false;
            ?? ?}
            ?? ?void?? ?code_end(){
            ?? ??? ?_loop = false; _begin = false;_end=true;
            ?? ??? ?CloseHandle(_thandle);
            ?? ?}
            protected:
            ?? ?static void?? ?run(btworkThread* thread){
            ?? ??? ?thread->_entry(thread,thread->_param);
            ?? ?}
            private:
            ?? ?volatile bool?? ?_loop,_begin,_end;
            ?? ?void (*_entry)(btworkThread* ,void*);
            ?? ?void*?? ?_param;
            ?? ?DWORD?? ?_tid;
            ?? ?HANDLE?? ?_thandle;
            };
            posted @ 2007-02-23 22:47 放屁阿狗 閱讀(699) | 評(píng)論 (3)編輯 收藏

            ??? #include "btMutex.h"

            template <typename T>
            class SmartHandlePtr{
            ??? struct Handle{
            ??? ??? Handle(){
            ??? ??? ??? ptr = NULL;
            ??? ??? ??? cnt = 0;
            ??? ??? }
            ??? ??? void*??? ptr;
            ??? ??? int??? ??? cnt;
            ??? ??? btLock??? lock;
            ??? ??? void??? inc(){
            ??? ??? ??? btScopeLock sl(lock);
            ??? ??? ??? cnt++;
            ??? ??? }
            ??? ??? void??? dec(){
            ??? ??? ??? btScopeLock sl(lock);
            ??? ??? ??? cnt--;
            ??? ??? }
            ??? };
            public:
            ??? SmartHandlePtr(const T* p){
            ??? ??? _ph = new Handle;
            ??? ??? _ph->ptr =(void*) p;
            ??? ??? _ph->inc();
            ??? }

            ??? ~SmartHandlePtr(){
            ??? ??? if( _ph ){
            ??? ??? ??? _ph->dec();
            ??? ??? ??? if( _ph->cnt==0){
            ??? ??? ??? ??? T* p;
            ??? ??? ??? ??? p = (T*)_ph->ptr;
            ??? ??? ??? ??? if( p ){
            ??? ??? ??? ??? ??? delete p;
            ??? ??? ??? ??? }
            ??? ??? ??? ??? delete _ph;
            ??? ??? ??? }??? ??? ???
            ??? ??? }
            ??? }

            ??? SmartHandlePtr(const SmartHandlePtr& shp){
            ??? ??? if( _ph ){
            ??? ??? ??? _ph->dec();
            ??? ??? ??? if( _ph->cnt==0){
            ??? ??? ??? ??? T* p;
            ??? ??? ??? ??? p = (T*)_ph->ptr;
            ??? ??? ??? ??? if( p){
            ??? ??? ??? ??? ??? delete p;
            ??? ??? ??? ??? }
            ??? ??? ??? ??? delete _ph;
            ??? ??? ??? }??? ??? ???
            ??? ??? }
            ??? ??? _ph = _ph;
            ??? ??? _ph->inc();
            ??? }
            ??? bool operator==(const T* p) {
            ??? ??? return _ph->ptr == p;
            ??? }
            ??? bool operator==(const SmartHandlePtr& shp){
            ??? ??? return _ph == shp._ph;
            ??? }

            ??? T* operator->(){
            ??? ??? return (T*)_ph->ptr;
            ??? }

            ??? T* get(){
            ??? ??? if( _ph && _ph->ptr){
            ??? ??? ??? return (T*)_ph->ptr;
            ??? ??? }
            ??? ??? return NULL;
            ??? }

            private:
            ??? Handle*??? _ph;
            };
            posted @ 2007-02-23 22:39 放屁阿狗 閱讀(1196) | 評(píng)論 (0)編輯 收藏

            我的小狗在2006.8.21出世了,這個(gè)世界除了干活之外多了點(diǎn)活躍的氣息。
            小狗不好帶,但也盡量去嘗試做父親的責(zé)任
            posted @ 2006-09-03 11:22 放屁阿狗 閱讀(175) | 評(píng)論 (0)編輯 收藏

            我記得有個(gè)Omni的類(lèi)庫(kù)中有對(duì)線程的封裝,看了看,不爽
            ACE也有線程類(lèi),不過(guò)要用必須連接其龐大的ace.so 不爽
            ICE也有,不過(guò)太簡(jiǎn)單
            還是自己寫(xiě):
            哈哈,支持win32和posix接口
            這個(gè)咚咚已經(jīng)在好多地方用過(guò),希望提點(diǎn)

             1 
             2 #ifndef _THREAD_H
             3 #define _THREAD_H
             4 
             5 #include "nv_vartype.h"
             6 #include "nvplat.h"
             7 
             8 #ifdef WIN32
             9 #include <windows.h>
            10 typedef HANDLE NVHANDLE;
            11 
            12 #define NVCreateThead(handle,proc,param,bret) {\
            13                                                 DWORD thrid;\
            14                                                 handle = CreateThread(0,0,(LPTHREAD_START_ROUTINE)proc,(void*)param,0,&thrid);\
            15                                                 bret  = true;\
            16                                               }
            17 #define THREAD_DETACH
            18 
            19 #endif
            20 
            21 #ifdef _UNIX
            22 typedef pthread_t NVHANDLE;
            23 
            24 #define NVCreateThead(handle,proc,param,bret)    {\
            25                                                  int ret;\
            26                                                  ret= pthread_create(&handle,0,proc,param);\
            27                                                  bret= (ret!=0)?false:true;\
            28                                                 }
            29 #define THREAD_DETACH            pthread_detach(pthread_self());
            30 #endif
            31 
            32 
            33 typedef void *(*THREAD_PROC)(void *param);
            34 
            35 
            36 class NVThread{
            37 public:
            38     enum STATUS{
            39         RUNNING,
            40         STOP
            41     };
            42     enum WHERE{
            43         HEAD,
            44         TAIL
            45     };
            46     NVThread();
            47     ~NVThread();    
            48     bool        Create(void *param=0);
            49     void        Terminate();
            50     void        Wait();
            51     STATUS         GetStatus();
            52     void         SetStatus(STATUS status);
            53     WHERE         GetWhere();
            54     void         SetWhere(WHERE where);
            55     static void *     NewThread(void *);
            56     virtual void     Run(void *param);
            57 protected:    
            58     NVHANDLE    _thrhand;
            59     STATUS        _status;
            60     WHERE        _where;
            61     void *        _param;
            62     void *        _void;
            63 };
            64 
            65 #define  THREAD_START(t)    (t).SetStatus(RUNNING); (t).SetWhere(HEAD);
            66 #define  THREAD_END(t)    (t).SetStatus(STOP); (t).SetWhere(TAIL);THREAD_DETACH;
            67 #define  THREAD_CONTINUE(t) ((t).GetStatus()== NVThread::RUNNING)?true:false
            68 
            69 #define THREAD_START_T    THREAD_START(*this)
            70 #define THREAD_END_T    THREAD_END(*this)
            71 #define THREAD_CONTINUE_T THREAD_CONTINUE(*this)
            72 
            73 
            74 
            75 #include "nvthread.i"
            76 
            77 #endif
            78 //--
            79 
             1 
             2 
             3 #include "nvthread.h"
             4 
             5 inline  
             6 NVThread::NVThread(){
             7     _where = TAIL;
             8     _status = STOP;
             9     
            10 }
            11 inline  
            12 NVThread::~NVThread(){
            13 }
            14 
            15 inline  
            16 bool NVThread::Create(void *param){
            17     bool ret;
            18     NVCreateThead(_thrhand,NVThread::NewThread,this,ret);
            19     if( ret){ //--線程創(chuàng)建成功,等待線程運(yùn)行狀態(tài)改變
            20         while( GetStatus()!=NVThread::RUNNING){
            21             SLEEP_MSEC(100);
            22         }
            23     }
            24     return ret;
            25 }
            26 
            27 inline 
            28 void NVThread::Terminate(){
            29     _status = STOP;
            30 }
            31 
            32 inline 
            33 void * NVThread::NewThread(void *param){
            34     NVThread *thread = (NVThread *)param;
            35     THREAD_START(*thread);
            36     thread->Run(thread->_param);
            37     THREAD_END(*thread);
            38     return 0;
            39 }
            40 
            41 inline 
            42 void NVThread::Run(void *param){
            43 /*    while(THREAD_CONTINUE(*this)){
            44         Sleep(100);
            45     }    */
            46 }
            47 
            48 inline 
            49 void NVThread::Wait(){
            50     while(GetWhere()!=TAIL){
            51         SLEEP_MSEC(100);
            52     }
            53 }
            54 
            55 inline 
            56 NVThread::STATUS NVThread::GetStatus(){
            57     return _status;
            58 }
            59 
            60 inline 
            61 void NVThread::SetStatus(STATUS status){
            62     _status = status;
            63 }
            64 
            65 inline 
            66 NVThread::WHERE NVThread::GetWhere(){
            67     return _where;
            68 }
            69 
            70 inline 
            71 void NVThread::SetWhere(WHERE where){
            72     _where = where;
            73 }
            74 
            75 
            76 
            77 

            派生線程類(lèi)實(shí)現(xiàn)分派外部全局函數(shù)
             1
             2#ifndef _THREADOBJECT_H
             3#define _THREADOBJECT_H
             4
             5/*
             6    file:    nvthreadobj.h
             7    class:     NVThreadObject
             8    desc:    控制外部線程行為
             9*/

            10
            11
            12#include "nvthread.h"
            13
            14class NVThreadObject:public NVThread{
            15public:
            16    void     Run(void *param){
            17        _threadproc(param);    
            18    }

            19    bool    Create(THREAD_PROC proc,void *param=0){
            20        _threadproc = proc;
            21        _param = param;
            22        return NVThread::Create();
            23    }

            24protected:    
            25    THREAD_PROC    _threadproc;
            26}
            ;
            27#endif
            posted @ 2006-03-11 00:24 放屁阿狗 閱讀(530) | 評(píng)論 (0)編輯 收藏

            準(zhǔn)備辭職到通知領(lǐng)導(dǎo)不過(guò)2,3天的功夫
            實(shí)在不想去做實(shí)施那個(gè)ultra的破東西,整日跟客戶(hù)打交道,處人際關(guān)系小心謹(jǐn)慎的過(guò)活,一呆就是一整天。這種日子我定是受不了。
            領(lǐng)導(dǎo)給我分析就業(yè)形勢(shì),就是勸我繼續(xù)留下,說(shuō)是做行業(yè)實(shí)施比做開(kāi)發(fā)吃香,做開(kāi)發(fā)是吃青春飯的。
            呵呵,我可不是這么認(rèn)為,只有開(kāi)發(fā)水平上不去而被淘汰的人才會(huì)有這種想法。
            做開(kāi)發(fā),做編程一直是我的興趣。工作帶有自己的興趣便是工作就不是一種痛苦的責(zé)任了,我每天7小時(shí)睡眠,路上花2小時(shí),吃飯加上其他時(shí)間一天有14小時(shí)左右是在computer之前。
            喜歡研究新的技術(shù),看到或者聽(tīng)到有某些技術(shù)出現(xiàn),我都回去花大量時(shí)間去研究和編碼實(shí)踐,縱向橫向比較其優(yōu)劣點(diǎn),然后對(duì)其不足之處去修改或者自己重新實(shí)現(xiàn)自己的版本,結(jié)果就是使自己的眼睛越來(lái)越酸疼,老婆越來(lái)越多的嘮叨。
            我一直鼓勵(lì)別人多接觸開(kāi)源社區(qū),多看看一些軟件代碼,吸收其精髓來(lái)強(qiáng)身健體。
            有點(diǎn)扯遠(yuǎn)了,繼續(xù)說(shuō)我的工作。
            領(lǐng)導(dǎo)同意我的辭職,只是要求把登記公司的開(kāi)發(fā)工作做完。
            工作其實(shí)也是簡(jiǎn)單,在異構(gòu)的系統(tǒng)環(huán)境中開(kāi)發(fā)一些輔助性的軟件,大概8,9個(gè)之多。
            所以我現(xiàn)在還是繼續(xù)呆在公司,完成交待給我的工作。到今天,所有的開(kāi)發(fā)已經(jīng)差之無(wú)多了,因?yàn)槲矣昧藀ython(現(xiàn)在真是喜歡它,數(shù)據(jù)庫(kù),用戶(hù)接口,分布式應(yīng)用系統(tǒng)(ICE) 無(wú)所不能),過(guò)幾天估計(jì)就要去現(xiàn)場(chǎng)調(diào)試。
            其實(shí)我也挺喜歡這個(gè)工作環(huán)境,雖然剛剛被另外一家公司兼并,雖然跑了很多的人,雖然不加工資,雖然......
            接著我就得考慮找工作的問(wèn)題,頭又開(kāi)始有點(diǎn)大了。。。
            posted @ 2006-03-11 00:09 放屁阿狗 閱讀(325) | 評(píng)論 (0)編輯 收藏

            現(xiàn)在發(fā)現(xiàn)自己面試的心態(tài)很不好,不喜歡別人問(wèn)東問(wèn)西,問(wèn)一些無(wú)關(guān)緊要的事情。討厭問(wèn)一些膚淺的技術(shù),比如老是有人問(wèn):"啊,了解多線程技術(shù)嗎","寫(xiě)過(guò)socket網(wǎng)絡(luò)通信程序嗎?"....
            現(xiàn)在碰到面試的情況,我很是討厭讓我介紹自己,如何介紹,現(xiàn)在自己也不清楚。
            其實(shí)只要看我的工作簡(jiǎn)歷和要求的工資待遇就可以看出我的能力了的,我是這樣想的。
            一次去面試,等了10分鐘,談了10分鐘,說(shuō)是要等總監(jiān)定奪,靠!騙我老遠(yuǎn)來(lái)面試,很是不爽
            期待面試,我想找份收入高點(diǎn)的工作,畢竟現(xiàn)在這點(diǎn)錢(qián)只能維持養(yǎng)家糊口的水平,生活家庭的責(zé)任感越來(lái)越強(qiáng)烈;可是到了面試時(shí)候卻是打不起任何精神。
            posted @ 2006-03-02 01:10 放屁阿狗 閱讀(358) | 評(píng)論 (0)編輯 收藏

            vnc可是好東西,對(duì)linux的支持可是非常之優(yōu)秀,比起在windows上要表現(xiàn)的好的多
            vnc采用c/s架構(gòu),其通信機(jī)制沒(méi)有多少的復(fù)雜,但是對(duì)編寫(xiě)windows版本服務(wù)端代碼的開(kāi)發(fā)者對(duì)windows api駕馭的能力倒是有點(diǎn)佩服
             其實(shí)現(xiàn)技術(shù):
                  win-hook + event-simulate + gdi-bitmap-capture(delay send) + libjpeg + socket
            研究完了其工作機(jī)制之后我也寫(xiě)了一個(gè)類(lèi)vnc的服務(wù)器和客戶(hù)端程序,運(yùn)行之后發(fā)現(xiàn)在頻率很高的bitmap捕獲到libjpeg的壓縮的過(guò)程很耗cpu資源,還有就是雖然采用jpeg壓縮(如在做視頻監(jiān)控時(shí)采用的mjpeg設(shè)備一樣)還是于碼流太大,跟vnc比較了以下好像還是有一點(diǎn)的差距,畢竟不是當(dāng)作一個(gè)正式的咚咚去做的,等有時(shí)間之后或者某人倡議之下繼續(xù)完善它吧!
            posted @ 2006-03-02 01:00 放屁阿狗 閱讀(3843) | 評(píng)論 (21)編輯 收藏


              1 #include <stdio.h>
              2 
              3 #include "jpeglib.h"
              4 
              5 void
              6 JpegInitDestination(j_compress_ptr cinfo)
              7 {
              8 }
              9 
             10 static boolean
             11 JpegEmptyOutputBuffer(j_compress_ptr cinfo)
             12 {    
             13     return TRUE;
             14 }
             15 
             16 static void
             17 JpegTermDestination(j_compress_ptr cinfo)
             18 {
             19 //    jpegDstDataLen = jpegDstBufferLen - jpegDstManager.free_in_buffer;
             20 }
             21 
             22 /**
             23     Raw Rgb Data converted to Jpeg data
             24 */
             25 bool JpegCompress(int w,int h,const char * rgb_data,int rgb_size,
             26                   char * jpeg_data,int *jpeg_size){
             27     struct jpeg_compress_struct cinfo;
             28     struct jpeg_error_mgr jerr;
             29     struct jpeg_destination_mgr jpegDstManager;
             30     int ret;
             31     unsigned char *srcBuf = new unsigned char[w * 3];
             32     JSAMPROW rowPointer[1];
             33     rowPointer[0= (JSAMPROW)srcBuf;
             34     int left_size;
             35     left_size = *jpeg_size;
             36     cinfo.err = jpeg_std_error(&jerr);
             37     jpeg_create_compress(&cinfo);
             38 
             39     cinfo.image_width = w;
             40     cinfo.image_height = h;
             41     cinfo.input_components = 3;
             42     cinfo.in_color_space = JCS_RGB;
             43     cinfo.raw_data_in = true;
             44     jpeg_set_defaults(&cinfo);
             45     
             46     
             47     cinfo.dest = &jpegDstManager;
             48     
             49     jpegDstManager.next_output_byte = (unsigned char*)jpeg_data;
             50     jpegDstManager.free_in_buffer = left_size;
             51     jpegDstManager.init_destination = JpegInitDestination;
             52     jpegDstManager.empty_output_buffer = JpegEmptyOutputBuffer;
             53     jpegDstManager.term_destination = JpegTermDestination;
             54         
             55     //jpeg_set_quality(&cinfo, 20, TRUE);
             56     
             57     jpeg_start_compress(&cinfo, TRUE);    
             58     for(int y=0;y< h;y++){
             59         rowPointer[0= (unsigned char*)(rgb_data + y*w*3);
             60         ret = jpeg_write_scanlines(&cinfo, rowPointer, 1);
             61     }
             62     jpeg_finish_compress(&cinfo);    
             63     jpeg_destroy_compress(&cinfo);    
             64     *jpeg_size = left_size - jpegDstManager.free_in_buffer;
             65     return true;
             66 }
             67 
             68 void
             69 JpegInitSource(j_decompress_ptr cinfo)
             70 {
             71 
             72 }
             73 
             74 boolean
             75 JpegFillInputBuffer(j_decompress_ptr cinfo)
             76 {
             77     /*
             78     jpegError = true;
             79     jpegSrcManager.bytes_in_buffer = jpegBufferLen;
             80     jpegSrcManager.next_input_byte = (JOCTET *)jpegBufferPtr;    */
             81     return TRUE;
             82 }
             83 
             84 void
             85 JpegSkipInputData(j_decompress_ptr cinfo, long num_bytes)
             86 {/*
             87     if (num_bytes < 0 || (size_t)num_bytes > jpegSrcManager.bytes_in_buffer) {
             88         jpegError = true;
             89         jpegSrcManager.bytes_in_buffer = jpegBufferLen;
             90         jpegSrcManager.next_input_byte = (JOCTET *)jpegBufferPtr;
             91     } else {
             92         jpegSrcManager.next_input_byte += (size_t) num_bytes;
             93         jpegSrcManager.bytes_in_buffer -= (size_t) num_bytes;
             94     }*/
             95 }
             96 
             97 void
             98 JpegTermSource(j_decompress_ptr cinfo)
             99 {
            100     /* No work necessary here. */
            101 }
            102 
            103 bool JpegUnCompress(const char * jpeg_data,int jpeg_size,
            104                     char *rgb_data,int rgb_size,int w,int h){
            105     struct jpeg_decompress_struct cinfo;
            106     struct jpeg_error_mgr jerr;
            107     struct jpeg_source_mgr jpegSrcManager;
            108     int ret;
            109     JSAMPROW rowPointer[1];
            110     cinfo.err = jpeg_std_error(&jerr);
            111     jpeg_create_decompress(&cinfo);
            112 
            113     jpegSrcManager.init_source = JpegInitSource;
            114     jpegSrcManager.fill_input_buffer = JpegFillInputBuffer;
            115     jpegSrcManager.skip_input_data = JpegSkipInputData;
            116     jpegSrcManager.resync_to_restart = jpeg_resync_to_restart;
            117     jpegSrcManager.term_source = JpegTermSource;
            118     jpegSrcManager.next_input_byte = (unsigned char*)jpeg_data;
            119     jpegSrcManager.bytes_in_buffer = jpeg_size;
            120     cinfo.src = &jpegSrcManager;
            121     
            122     jpeg_read_header(&cinfo, TRUE);
            123     cinfo.out_color_space = JCS_RGB;
            124     jpeg_start_decompress(&cinfo);
            125     if( cinfo.output_width != (unsigned int)w && cinfo.output_height != (unsigned int)h){
            126         jpeg_destroy_decompress(&cinfo);
            127         return false;
            128     }
            129     for (int dy = 0; cinfo.output_scanline < cinfo.output_height; dy++) {
            130         rowPointer[0= (unsigned char *)(rgb_data + w*dy*3);
            131         ret = jpeg_read_scanlines(&cinfo, rowPointer, 1);
            132     }
            133     jpeg_finish_decompress(&cinfo);        
            134     jpeg_destroy_decompress(&cinfo);        
            135     return true;
            136 }
            137 
            posted @ 2006-03-02 00:47 放屁阿狗 閱讀(8477) | 評(píng)論 (9)編輯 收藏

                 摘要:  1  2 #ifndef _BITMAP_H 3 #define _BITMAP_H 4  5 #include <windows.h> 6  7 void SaveImage(const cha...  閱讀全文
            posted @ 2006-03-02 00:45 放屁阿狗 閱讀(2385) | 評(píng)論 (0)編輯 收藏

                 摘要:  1 // VideoDrawer.h: interface for the CVideoDrawer class. 2 // 3 //////////////////////////////////////////////////////////////////////&nbs...  閱讀全文
            posted @ 2006-03-02 00:42 放屁阿狗 閱讀(1467) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共25頁(yè): First 17 18 19 20 21 22 23 24 25 
            久久97精品久久久久久久不卡| 国产精品熟女福利久久AV| 亚洲色婷婷综合久久| 国产精品久久久福利| 狠狠久久综合伊人不卡| 久久久久久久久久久| 亚洲狠狠综合久久| 国产美女亚洲精品久久久综合| 久久久久一区二区三区| 久久成人小视频| 久久久九九有精品国产| 99精品久久精品一区二区| 国产三级精品久久| 国产精品久久久久久| 久久精品极品盛宴观看| 狠狠色丁香婷婷综合久久来来去| 日韩久久久久久中文人妻 | 亚洲AV无码久久精品狠狠爱浪潮| 国产精品久久久久久影院| 伊人久久精品无码av一区| 久久综合伊人77777麻豆| 亚洲国产精久久久久久久| 人妻无码αv中文字幕久久琪琪布| 性欧美大战久久久久久久| 大香网伊人久久综合网2020| 国产精品美女久久久久久2018| 久久精品国产亚洲AV忘忧草18| 性做久久久久久久久久久| 国产精品美女久久久网AV| 66精品综合久久久久久久| 久久国产精品成人片免费| 午夜精品久久久久久久久| 超级碰碰碰碰97久久久久| 国产一区二区久久久| 欧美亚洲国产精品久久久久| 久久一区二区三区免费| 精品综合久久久久久88小说 | 97精品依人久久久大香线蕉97| 久久夜色精品国产| 久久笫一福利免费导航 | 精品久久久久久久中文字幕|