亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? asyncio.h

?? VC ++ ,遠程視頻 監控系統...分服務客戶端
?? H
字號:
//==========================================================================;
//
//  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
//  PURPOSE.
//
//  Copyright (c) 1992 - 1997  Microsoft Corporation.  All Rights Reserved.
//
//--------------------------------------------------------------------------;

#ifndef __ASYNCIO_H__
#define __ASYNCIO_H__
//
// definition of CAsyncFile object that performs file access. It provides
// asynchronous, unbuffered, aligned reads from a file, using a worker thread
// on win95 and potentially overlapped i/o if available.

// !!! Need to use real overlapped i/o if available
// currently only uses worker thread, not overlapped i/o


class CAsyncIo;
class CAsyncStream;

//
//  Model the stream we read from based on a file-like interface
//
class CAsyncStream
{
public:
    virtual ~CAsyncStream() {};
    virtual HRESULT SetPointer(LONGLONG llPos) = 0;
    virtual HRESULT Read(PBYTE pbBuffer,
                         DWORD dwBytesToRead,
                         BOOL bAlign,
                         LPDWORD pdwBytesRead) = 0;
    virtual LONGLONG Size(LONGLONG *pSizeAvailable = NULL) = 0;
    virtual DWORD Alignment() = 0;
    virtual void Lock() = 0;
    virtual void Unlock() = 0;
};

// represents a single request and performs the i/o. Can be called on either
// worker thread or app thread, but must hold pcsFile across file accesses.
// (ie across SetFilePointer/ReadFile pairs)
class CAsyncRequest
{
    CAsyncIo *m_pIo;
    CAsyncStream *m_pStream;
    LONGLONG      m_llPos;
    BOOL        m_bAligned;
    LONG 	m_lLength;
    BYTE* 	m_pBuffer;
    LPVOID 	m_pContext;
    DWORD	m_dwUser;
    HRESULT     m_hr;

public:
    // init the params for this request. Issue the i/o
    // if overlapped i/o is possible.
    HRESULT Request(
    	CAsyncIo *pIo,
        CAsyncStream *pStream,
    	LONGLONG llPos,
	LONG lLength,
        BOOL bAligned,
	BYTE* pBuffer,
	LPVOID pContext,	// filter's context
	DWORD dwUser);		// downstream filter's context

    // issue the i/o if not overlapped, and block until i/o complete.
    // returns error code of file i/o
    HRESULT Complete();

    // cancels the i/o. blocks until i/o is no longer pending
    HRESULT Cancel()
    {
	return S_OK;
    };

    // accessor functions
    LPVOID GetContext()
    {
    	return m_pContext;
    };

    DWORD GetUser()
    {
	return m_dwUser;
    };

    HRESULT GetHResult() {
        return m_hr;
    };

    // we set m_lLength to the actual length
    LONG GetActualLength() {
        return m_lLength;
    };

    LONGLONG GetStart() {
        return m_llPos;
    };
};


typedef CGenericList<CAsyncRequest> CRequestList;

// this class needs a worker thread, but the ones defined in classes\base
// are not suitable (they assume you have one message sent or posted per
// request, whereas here for efficiency we want just to set an event when
// there is work on the queue).
//
// we create CAsyncRequest objects and queue them on m_listWork. The worker
// thread pulls them off, completes them and puts them on m_listDone.
// The events m_evWork and m_evDone are set when the corresponding lists are
// not empty.
//
// Synchronous requests are done on the caller thread. These should be
// synchronised by the caller, but to make sure we hold m_csFile across
// the SetFilePointer/ReadFile code.
//
// Flush by calling BeginFlush. This rejects all further requests (by
// setting m_bFlushing within m_csLists), cancels all requests and moves them
// to the done list, and sets m_evDone to ensure that no WaitForNext operations
// will block. Call EndFlush to cancel this state.
//
// we support unaligned calls to SyncRead. This is done by opening the file
// twice if we are using unbuffered i/o (m_dwAlign > 1).
// !!!fix this to buffer on top of existing file handle?
class CAsyncIo
{

    CCritSec m_csReader;
    CAsyncStream *m_pStream;

    CCritSec m_csLists;      // locks access to the list and events
    BOOL m_bFlushing;        // true if between BeginFlush/EndFlush
    CRequestList m_listWork;
    CRequestList m_listDone;
    CAMEvent m_evWork;         // set when list is not empty
    CAMEvent m_evDone;

    // for correct flush behaviour: all protected by m_csLists
    LONG    m_cItemsOut;    // nr of items not on listDone or listWork
    BOOL    m_bWaiting;     // TRUE if someone waiting for m_evAllDone
    CAMEvent m_evAllDone;   // signal when m_cItemsOut goes to 0 if m_cWaiting


    CAMEvent m_evStop;         // set when thread should exit
    HANDLE m_hThread;

    LONGLONG Size() {
        ASSERT(m_pStream != NULL);
        return m_pStream->Size();
    };

    // start the thread
    HRESULT StartThread(void);

    // stop the thread and close the handle
    HRESULT CloseThread(void);

    // manage the list of requests. hold m_csLists and ensure
    // that the (manual reset) event hevList is set when things on
    // the list but reset when the list is empty.
    // returns null if list empty
    CAsyncRequest* GetWorkItem();

    // get an item from the done list
    CAsyncRequest* GetDoneItem();

    // put an item on the work list
    HRESULT PutWorkItem(CAsyncRequest* pRequest);

    // put an item on the done list
    HRESULT PutDoneItem(CAsyncRequest* pRequest);

    // called on thread to process any active requests
    void ProcessRequests(void);

    // initial static thread proc calls ThreadProc with DWORD
    // param as this
    static DWORD InitialThreadProc(LPVOID pv) {
	CAsyncIo * pThis = (CAsyncIo*) pv;
	return pThis->ThreadProc();
    };

    DWORD ThreadProc(void);

public:

    CAsyncIo(CAsyncStream *pStream);
    ~CAsyncIo();

    // open the file
    HRESULT Open(LPCTSTR pName);

    // ready for async activity - call this before
    // calling Request
    HRESULT AsyncActive(void);

    // call this when no more async activity will happen before
    // the next AsyncActive call
    HRESULT AsyncInactive(void);

    // queue a requested read. must be aligned.
    HRESULT Request(
	    	LONGLONG llPos,
		LONG lLength,
                BOOL bAligned,
		BYTE* pBuffer,
		LPVOID pContext,
		DWORD dwUser);

    // wait for the next read to complete
    HRESULT WaitForNext(
	    	DWORD dwTimeout,
		LPVOID *ppContext,
		DWORD * pdwUser,
                LONG * pcbActual
                );

    // perform a read of an already aligned buffer
    HRESULT SyncReadAligned(
	    	LONGLONG llPos,
		LONG lLength,
		BYTE* pBuffer,
                LONG* pcbActual
                );

    // perform a synchronous read. will be buffered
    // if not aligned.
    HRESULT SyncRead(
                LONGLONG llPos,
                LONG lLength,
                BYTE* pBuffer);

    // return length
    HRESULT Length(LONGLONG *pllTotal, LONGLONG* pllAvailable);

    // all Reader positions, read lengths and memory locations must
    // be aligned to this.
    HRESULT Alignment(LONG* pl);

    HRESULT BeginFlush();
    HRESULT EndFlush();

    LONG Alignment()
    {
        return m_pStream->Alignment();
    };

    BOOL IsAligned(LONG l) {
	if ((l & (Alignment() -1)) == 0) {
	    return TRUE;
	} else {
	    return FALSE;
	}
    };

    BOOL IsAligned(LONGLONG ll) {
	return IsAligned( (LONG) (ll & 0xffffffff));
    };
};

#endif // __ASYNCIO_H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品秘密| 日韩专区一卡二卡| 欧美美女一区二区在线观看| 国产精品久久福利| 欧美一区二区三区小说| 日本高清不卡视频| 播五月开心婷婷综合| 国产精品18久久久久| 午夜a成v人精品| 午夜欧美在线一二页| √…a在线天堂一区| 欧美韩国日本一区| 久久女同性恋中文字幕| 精品国产露脸精彩对白| 欧美一级高清大全免费观看| 欧美一区二区福利在线| 欧美一区二区免费| 91精品午夜视频| 91精品国模一区二区三区| 91影院在线免费观看| 国产盗摄视频一区二区三区| 看电视剧不卡顿的网站| 亚洲日本乱码在线观看| 国产精品久久影院| 国产精品国产自产拍高清av| 国产精品二三区| 18涩涩午夜精品.www| 中文字幕在线一区| 亚洲精品成人在线| 性感美女久久精品| 一区二区在线观看免费| 日韩电影在线观看一区| 国模大尺度一区二区三区| 韩国一区二区三区| 成人免费高清在线观看| 色欧美片视频在线观看| 欧美一级欧美三级| 久久久99精品久久| 国产精品萝li| 亚洲成人一二三| 激情成人午夜视频| 色综合天天性综合| 91精品国产综合久久香蕉麻豆| 日韩精品资源二区在线| 国产喷白浆一区二区三区| 1000精品久久久久久久久| 亚洲第一综合色| 国产高清成人在线| 在线亚洲高清视频| 欧美精品一区二区三区久久久| 欧美激情艳妇裸体舞| 一级中文字幕一区二区| 久久精品国产精品青草| 成人深夜在线观看| 欧美福利一区二区| 国产精品理论片在线观看| 亚洲h动漫在线| 成人性色生活片免费看爆迷你毛片| 色哟哟国产精品免费观看| 欧美r级电影在线观看| 亚洲丝袜制服诱惑| 国产一区二区精品在线观看| 欧美在线一区二区| 精品粉嫩超白一线天av| 午夜精品影院在线观看| 成人黄色一级视频| 久久综合色8888| 亚洲资源在线观看| 成人高清免费观看| 久久亚洲私人国产精品va媚药| 亚洲综合999| 99国产精品久久久久| 精品剧情v国产在线观看在线| 亚洲午夜日本在线观看| 成人性色生活片| 日韩精品在线一区二区| 亚洲影视资源网| 99久久伊人久久99| 久久久青草青青国产亚洲免观| 亚洲国产乱码最新视频| 99久久99久久久精品齐齐| 久久久久久免费毛片精品| 日韩精品欧美精品| 欧美日韩国产美女| 亚洲欧洲韩国日本视频| 紧缚捆绑精品一区二区| 91精品国产色综合久久久蜜香臀| 国产精品久久久久一区二区三区| 国产裸体歌舞团一区二区| 欧美tk—视频vk| 裸体在线国模精品偷拍| 在线综合+亚洲+欧美中文字幕| 亚洲日本护士毛茸茸| 色综合一个色综合| 亚洲综合在线免费观看| 色狠狠色噜噜噜综合网| 亚洲精品国产一区二区三区四区在线 | 中国色在线观看另类| 国产精品一级二级三级| 久久久午夜精品理论片中文字幕| 肉肉av福利一精品导航| 日韩一区和二区| 亚洲国产精品久久久久婷婷884| 欧美专区亚洲专区| 日韩黄色片在线观看| 制服丝袜亚洲播放| 麻豆国产精品777777在线| 精品福利在线导航| 成人免费va视频| 综合av第一页| 91麻豆精品国产91久久久久 | 亚洲天堂精品视频| 成人看片黄a免费看在线| 国产精品女主播在线观看| 91免费版在线| 亚洲欧美激情视频在线观看一区二区三区 | 欧洲视频一区二区| 日日夜夜精品视频天天综合网| 91精品一区二区三区久久久久久 | 日韩欧美一区在线| 国产呦精品一区二区三区网站| 国产精品国模大尺度视频| 欧美日韩精品免费观看视频 | 欧美日韩大陆一区二区| 亚洲动漫第一页| 日韩精品一区二区在线| 国产精品一级二级三级| 亚洲视频一二三区| 欧美一区二区精品久久911| 激情欧美一区二区| 国产精品美女www爽爽爽| 欧美亚洲国产一区二区三区| 日韩电影免费在线看| 久久精品欧美日韩精品| 欧美伊人精品成人久久综合97| 全国精品久久少妇| 亚洲欧美一区二区在线观看| 日韩午夜av电影| 99久久婷婷国产综合精品电影| 麻豆精品一区二区av白丝在线 | 蜜臀久久99精品久久久画质超高清| 国产欧美一区二区三区沐欲| 欧美日韩在线亚洲一区蜜芽| 懂色av一区二区三区免费看| 水蜜桃久久夜色精品一区的特点| 国产精品久久久久一区| 日韩亚洲欧美高清| a亚洲天堂av| 日韩成人精品视频| 亚洲理论在线观看| 欧美精品一区二区三区久久久| 日本高清不卡视频| 国产一区999| 琪琪久久久久日韩精品| 性久久久久久久| 一区二区三区欧美久久| 国产精品午夜春色av| 欧美本精品男人aⅴ天堂| 欧美日韩国产成人在线免费| 91久久香蕉国产日韩欧美9色| 国产suv精品一区二区883| 麻豆视频观看网址久久| 秋霞av亚洲一区二区三| 日韩av网站免费在线| 天天色综合天天| 丝袜美腿亚洲综合| 亚洲精品你懂的| 国产精品大尺度| 亚洲精品日韩一| 亚洲综合色噜噜狠狠| 亚洲黄一区二区三区| 亚洲欧美日韩中文播放 | 成人中文字幕电影| 欧美aaaaa成人免费观看视频| 亚洲aaa精品| 日韩精品一区二区三区中文不卡| 色婷婷激情一区二区三区| 99久久久精品| 色哟哟一区二区在线观看| 在线观看精品一区| 欧美日韩一区在线观看| 欧美日韩国产区一| 欧美中文字幕一区二区三区| 国产成人精品亚洲777人妖| 国产a级毛片一区| 成人国产精品免费观看视频| av中文字幕在线不卡| 一本久道中文字幕精品亚洲嫩| 91国偷自产一区二区开放时间| 欧美日韩国产三级| 日韩欧美色综合网站| 国产清纯白嫩初高生在线观看91 | 欧美一区二区视频在线观看| 欧美一级日韩一级| 久久亚洲二区三区| 中文字幕一区二区三区在线观看| 亚洲欧美视频在线观看| 午夜精品久久久久久久99樱桃| 久久激情五月婷婷| 成人av资源网站|