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

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

?? fibers.c

?? <Win2k系統編程>源碼.次數為國人自編,內容豐富,還是不錯的.
?? C
字號:
/*++

Module Name:

    fibers.c

Abstract:

    This module illustrates the Win32 fiber APIs.

    This example implements a fiber based file copy operation.  Note that
    a number of different techiques exists for copying files programmatically;
    this sample simply illustrates the fiber APIs.

    This example makes use of a fiber data structure which is used to
    determine the behavior and state of the fiber.  One data structure
    exists for each fiber; the pointer to the data structure is passed
    to the fiber at fiber creation time via the lpParameter fiber parameter.

    The executing thread in the process makes a call to ConvertThreadToFiber,
    which allows fibers to be scheduled by the caller.  This also allows
    the resultant fiber to be scheduled by another fiber.

    Next, two additional fibers are created, one fiber which performs read
    operations against a specified file, and another fiber which performs
    the write operations against a specified file.

    The primary fiber then schedules the read fiber.  After a succesful
    read, the read fiber schedules the write fiber.  After a succesful write
    in the write fiber, the write fiber schedules the read fiber.  When
    the read/write cycle has completed, the primary fiber is scheduled,
    which results in the display of the read/write status. If an error occurs
    during the read or write fibers, the primary fiber is scheduled and status
    of the read/write is displayed.

    The fibers, fiber data structures, and file handles are then freed
    prior to process termination.

--*/

#include <windows.h>
#include <stdio.h>

VOID
__stdcall
ReadFiberFunc(
    LPVOID lpParameter
    );

VOID
__stdcall
WriteFiberFunc(
    LPVOID lpParameter
    );

void
DisplayFiberInfo(
    void
    );

typedef struct {
    DWORD dwParameter;          // DWORD parameter to fiber (unused)
    DWORD dwFiberResultCode;    // GetLastError() result code
    HANDLE hFile;               // handle to operate on
    DWORD dwBytesProcessed;     // number of bytes processed
} FIBERDATASTRUCT, *PFIBERDATASTRUCT, *LPFIBERDATASTRUCT;

#define RTN_OK 0
#define RTN_USAGE 1
#define RTN_ERROR 13

#define BUFFER_SIZE 32768   // read/write buffer size
#define FIBER_COUNT 3       // total number of fibers (including primary)

#define PRIMARY_FIBER 0 // array index to primary fiber
#define READ_FIBER 1    // array index to read fiber
#define WRITE_FIBER 2   // array index to write fiber

LPVOID g_lpFiber[FIBER_COUNT];
LPBYTE g_lpBuffer;
DWORD g_dwBytesRead;

int
__cdecl
main(
    int argc,
    char *argv[]
    )
{
    LPFIBERDATASTRUCT fs;

    if(argc != 3) {
        printf("Usage: %s <SourceFile> <DestinationFile>\n", argv[0]);
        return RTN_USAGE;
    }

    //
    // allocate storage for our fiber data structures
    //
    fs = (LPFIBERDATASTRUCT)HeapAlloc(
        GetProcessHeap(), 0, sizeof(FIBERDATASTRUCT) * FIBER_COUNT);

    if(fs == NULL) {
        printf("HeapAlloc error! (rc%=lu)\n", GetLastError());
        return RTN_ERROR;
    }

    //
    // allocate storage for the read/write buffer
    //
    g_lpBuffer = (LPBYTE)HeapAlloc(GetProcessHeap(), 0, BUFFER_SIZE);
    if(g_lpBuffer == NULL) {
        printf("HeapAlloc error! (rc=%lu)\n", GetLastError());
        return RTN_ERROR;
    }

    //
    // open the source file
    //
    fs[READ_FIBER].hFile = CreateFile(
        argv[1],
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_SEQUENTIAL_SCAN,
        NULL
        );

    if(fs[READ_FIBER].hFile == INVALID_HANDLE_VALUE) {
        printf("CreateFile error! (rc=%lu)\n", GetLastError());
        return RTN_ERROR;
    }

    //
    // open the destination file
    //
    fs[WRITE_FIBER].hFile = CreateFile(
        argv[2],
        GENERIC_WRITE,
        0,
        NULL,
        CREATE_NEW,
        FILE_FLAG_SEQUENTIAL_SCAN,
        NULL
        );

    if(fs[WRITE_FIBER].hFile == INVALID_HANDLE_VALUE) {
        printf("CreateFile error! (rc=%lu)\n", GetLastError());
        return RTN_ERROR;
    }

    //
    // convert this thread to a fiber, to allow scheduling of other fibers
    //
    g_lpFiber[PRIMARY_FIBER] = ConvertThreadToFiber(&fs[PRIMARY_FIBER]);

    if(g_lpFiber[PRIMARY_FIBER] == NULL) {
        printf("ConvertThreadToFiber failed! rc=%lu\n", GetLastError());
        return RTN_ERROR;
    }

    //
    // Just initialize the primary fiber data structure.  We don't use
    // the primary fiber data structure for anything in this sample.
    //
    fs[PRIMARY_FIBER].dwParameter = 0;
    fs[PRIMARY_FIBER].dwFiberResultCode = 0;
    fs[PRIMARY_FIBER].hFile = INVALID_HANDLE_VALUE;

    //
    // create the Read fiber
    //
    g_lpFiber[READ_FIBER] = CreateFiber(0, ReadFiberFunc, &fs[READ_FIBER]);

    if(g_lpFiber[READ_FIBER] == NULL) {
        printf("CreateFiber error! (rc=%lu)\n", GetLastError());
        return RTN_ERROR;
    }

    fs[READ_FIBER].dwParameter = 0x12345678;

    //
    // create the Write fiber
    //
    g_lpFiber[WRITE_FIBER]=CreateFiber(0, WriteFiberFunc, &fs[WRITE_FIBER]);

    if(g_lpFiber[WRITE_FIBER] == NULL) {
        printf("CreateFiber error! (rc=%lu)\n", GetLastError());
        return RTN_ERROR;
    }

    fs[WRITE_FIBER].dwParameter = 0x54545454;

    //
    // switch to the read fiber
    //
    SwitchToFiber(g_lpFiber[READ_FIBER]);

    //
    // We have now been scheduled again.  Display results from the read/write
    // fibers
    //
    printf("ReadFiber result == %lu Bytes Processed == %lu\n",
        fs[READ_FIBER].dwFiberResultCode, fs[READ_FIBER].dwBytesProcessed);

    printf("WriteFiber result == %lu Bytes Processed == %lu\n",
        fs[WRITE_FIBER].dwFiberResultCode, fs[WRITE_FIBER].dwBytesProcessed);

    //
    // Delete the fibers
    //
    DeleteFiber(g_lpFiber[READ_FIBER]);
    DeleteFiber(g_lpFiber[WRITE_FIBER]);

    //
    // close handles
    //
    CloseHandle(fs[READ_FIBER].hFile);
    CloseHandle(fs[WRITE_FIBER].hFile);

    //
    // free allocated memory
    //
    HeapFree(GetProcessHeap(), 0, g_lpBuffer);
    HeapFree(GetProcessHeap(), 0, fs);

    return RTN_OK;
}

VOID
__stdcall
ReadFiberFunc(
    LPVOID lpParameter
    )
{
    LPFIBERDATASTRUCT fds = (LPFIBERDATASTRUCT)lpParameter;

    //
    // if this fiber was passed NULL for fiber data, just return,
    // causing the current thread to exit
    //
    if(fds == NULL) {
        printf("Passed NULL fiber data.  Exiting current thread.\n");
        return;
    }

    //
    // display some information pertaining to the current fiber
    //
    DisplayFiberInfo();

    fds->dwBytesProcessed = 0;

    while(1) {
        //
        // read data from file specified in the READ_FIBER data structure
        //
        if(!ReadFile(fds->hFile, g_lpBuffer, BUFFER_SIZE, &g_dwBytesRead, NULL)) {
            break;
        }

        //
        // if we reached EOF, break
        //
        if(g_dwBytesRead == 0) break;

        //
        // update number of bytes processed in the fiber data structure
        //
        fds->dwBytesProcessed += g_dwBytesRead;

        //
        // switch to the write fiber
        //
        SwitchToFiber(g_lpFiber[WRITE_FIBER]);
    } // while

    //
    // update the fiber result code
    //
    fds->dwFiberResultCode = GetLastError();

    //
    // switch back to the primary fiber
    //
    SwitchToFiber(g_lpFiber[PRIMARY_FIBER]);
}

VOID
__stdcall
WriteFiberFunc(
    LPVOID lpParameter
    )
{
    LPFIBERDATASTRUCT fds = (LPFIBERDATASTRUCT)lpParameter;
    DWORD dwBytesWritten;

    //
    // if this fiber was passed NULL for fiber data, just return,
    // causing the current thread to exit
    //
    if(fds == NULL) {
        printf("Passed NULL fiber data.  Exiting current thread.\n");
        return;
    }

    //
    // display some information pertaining to the current fiber
    //
    DisplayFiberInfo();

    //
    // assume all of the writes succeed.  If a write fails, the fiber
    // result code will be updated to reflect the reason for failure
    //
    fds->dwBytesProcessed = 0;
    fds->dwFiberResultCode = ERROR_SUCCESS;

    while (1) {
        //
        // write data to the file specified in the WRITE_FIBER data structure
        //
        if(!WriteFile(fds->hFile, g_lpBuffer, g_dwBytesRead, &dwBytesWritten, NULL)) {
            //
            // if an error occurred writing, break
            //
            break;
        }

        //
        // update number of bytes processed in the fiber data structure
        //
        fds->dwBytesProcessed += dwBytesWritten;

        //
        // switch back to the read fiber
        //
        SwitchToFiber(g_lpFiber[READ_FIBER]);
    }  // while

    //
    // if an error occurred, update the fiber result code...
    //
    fds->dwFiberResultCode = GetLastError();

    //
    // ...and switch to the primary fiber
    //
    SwitchToFiber(g_lpFiber[PRIMARY_FIBER]);
}

void
DisplayFiberInfo(
    void
    )
{
    LPFIBERDATASTRUCT fds = (LPFIBERDATASTRUCT)GetFiberData();
    LPVOID lpCurrentFiber = GetCurrentFiber();

    //
    // determine which fiber we are executing, based on the fiber address
    //
    if(lpCurrentFiber == g_lpFiber[READ_FIBER])
        printf("Read Fiber entered");
    else {
        if(lpCurrentFiber == g_lpFiber[WRITE_FIBER])
            printf("Write Fiber entered");
        else {
            if(lpCurrentFiber == g_lpFiber[PRIMARY_FIBER])
                printf("Primary Fiber entered");
            else
                printf("Unknown Fiber entered");
            }
    }

    //
    // display dwParameter from the current fiber data structure
    //
    printf(" (dwParameter == 0x%lx)\n", fds->dwParameter);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品国产精品久久| 激情综合色综合久久| 亚洲乱码国产乱码精品精的特点| 亚洲精品午夜久久久| 一本色道a无线码一区v| 懂色av中文一区二区三区| 国产九色sp调教91| 国产黄色精品网站| 加勒比av一区二区| 国产精品白丝jk黑袜喷水| 国产成人在线影院| 91在线观看一区二区| 91免费视频大全| 欧美日韩激情一区二区三区| 欧美剧在线免费观看网站| 欧美肥大bbwbbw高潮| 日韩欧美精品在线视频| 久久精品夜色噜噜亚洲aⅴ| 欧美经典三级视频一区二区三区| 国产精品久久久久久久久免费丝袜 | 久久蜜臀精品av| 国产欧美1区2区3区| 国产精品久久久久久久久果冻传媒| 日韩理论电影院| 性久久久久久久久| 极品美女销魂一区二区三区免费 | 91农村精品一区二区在线| 97久久精品人人做人人爽| 欧美视频在线不卡| 日韩欧美一区在线观看| 国产精品少妇自拍| 亚洲国产精品久久久久婷婷884| 免费看欧美女人艹b| 成人av在线网| 91精品国产手机| 国产欧美1区2区3区| 图片区小说区国产精品视频 | 久久亚洲捆绑美女| 日韩一区中文字幕| 三级一区在线视频先锋 | 亚洲一区二区三区四区在线| 狠狠狠色丁香婷婷综合激情 | 天天综合日日夜夜精品| 国产精品资源网| 欧美日韩国产精品自在自线| 中文字幕巨乱亚洲| 久久精品国产亚洲a| 色一情一乱一乱一91av| 久久综合色天天久久综合图片| 一区二区三区在线观看欧美| 成人午夜激情在线| 欧美一区二区三区思思人| 亚洲男人的天堂av| 国产成人免费xxxxxxxx| 精品三级av在线| 亚洲第一在线综合网站| 不卡欧美aaaaa| 欧美经典一区二区三区| 黄页视频在线91| 欧美疯狂做受xxxx富婆| 亚洲美女偷拍久久| 成人深夜在线观看| 久久亚洲精精品中文字幕早川悠里| 三级欧美韩日大片在线看| 欧美婷婷六月丁香综合色| 亚洲国产成人私人影院tom| 精品无人码麻豆乱码1区2区| 3d动漫精品啪啪一区二区竹菊| 亚洲精品videosex极品| 91亚洲精品一区二区乱码| 国产精品国产a级| 国产大陆a不卡| 久久久久国色av免费看影院| 美女免费视频一区二区| 欧美一区二区三区精品| 日本91福利区| 日韩亚洲国产中文字幕欧美| 日本亚洲电影天堂| 日韩午夜激情av| 免费成人在线播放| 日韩情涩欧美日韩视频| 麻豆精品精品国产自在97香蕉| 日韩免费高清视频| 国产美女在线精品| 久久九九久精品国产免费直播| 国产九色sp调教91| 国产精品久久久久久久久晋中| 99久久精品免费| 亚洲精品第1页| 7777精品伊人久久久大香线蕉经典版下载 | 精品国产自在久精品国产| 奇米四色…亚洲| 久久亚洲精精品中文字幕早川悠里| 国内精品伊人久久久久av一坑| 国产欧美日韩三级| av激情综合网| 国产成人久久精品77777最新版本| 精品亚洲国产成人av制服丝袜| 久久66热re国产| 亚洲h动漫在线| 免费在线观看视频一区| 日韩一区二区三区三四区视频在线观看 | 中文字幕一区二区三中文字幕| 成人黄色在线视频| 一区二区三区免费网站| 欧美猛男超大videosgay| 美女视频一区在线观看| 国产精品免费免费| 欧美一级片在线观看| 国产白丝精品91爽爽久久| 亚洲一区二区三区视频在线播放| 欧美一级理论片| 99精品热视频| 激情深爱一区二区| 一级中文字幕一区二区| 久久久亚洲精华液精华液精华液| 99国内精品久久| 久久国产夜色精品鲁鲁99| 亚洲人成网站在线| 精品国产123| 欧美日韩国产高清一区二区三区| 国产a久久麻豆| 日韩高清在线电影| 亚洲欧洲日产国产综合网| 欧美一区二区精美| 欧美在线影院一区二区| 粉嫩一区二区三区在线看| 日韩不卡手机在线v区| 综合久久久久久久| 国产人成亚洲第一网站在线播放 | 亚洲激情在线播放| 国产精品乱人伦中文| 日韩欧美在线123| 欧美女孩性生活视频| 91丨九色丨国产丨porny| 国产一区二区三区久久悠悠色av| 丝袜美腿高跟呻吟高潮一区| 亚洲欧美激情插| 中文字幕一区二区三区在线不卡| 精品成人在线观看| 欧美一区二区免费观在线| 欧美系列亚洲系列| 色综合久久中文综合久久牛| 国产精品一级二级三级| 久久国产精品72免费观看| 石原莉奈在线亚洲二区| 亚洲国产视频一区| 亚洲自拍都市欧美小说| 亚洲精品综合在线| 成人免费视频在线观看| 综合亚洲深深色噜噜狠狠网站| 国产精品三级在线观看| 久久午夜国产精品| 久久综合九色综合欧美就去吻 | 国产成人亚洲精品青草天美| av动漫一区二区| 欧美一区二区三区免费视频| 欧美精品日韩一区| 在线不卡a资源高清| 日韩一级片在线播放| 欧美日韩国产一级二级| 欧美一区二区三区公司| 久久久亚洲综合| 日韩欧美一区中文| 日韩丝袜情趣美女图片| 国产精品美女久久久久久2018| 亚洲精品免费看| 亚洲色图欧洲色图婷婷| 亚洲一区二区美女| 国产精品女主播av| 午夜精品福利一区二区三区av| 狠狠网亚洲精品| 精品视频在线免费看| 国产日韩欧美高清| 9191精品国产综合久久久久久| 欧美日韩久久一区| 精品国产91久久久久久久妲己| 亚洲资源中文字幕| 天堂一区二区在线| 一区二区三区四区高清精品免费观看| 婷婷综合久久一区二区三区| 色婷婷av一区| 久久综合给合久久狠狠狠97色69| 亚洲男人的天堂在线aⅴ视频| 高清免费成人av| 91丝袜美腿高跟国产极品老师| 欧美日韩专区在线| 综合久久久久综合| 美女在线视频一区| 51精品秘密在线观看| 日韩一区二区精品葵司在线| 久久精品一区二区三区av| 精品国产一区久久| 亚洲制服丝袜在线| 激情综合网最新| 日韩久久免费av| 综合欧美亚洲日本| 国产成人精品亚洲日本在线桃色| 中文字幕欧美日本乱码一线二线| 国产高清视频一区|