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

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

?? srchwin.c

?? 《Win32多線程程序設計》配套代碼.集成了一般簡單的線程設計及優化的原理。
?? C
字號:
/*
 * SrchWin.c
 *
 * Sample code for "Multithreading Applications in Win32"
 * This is from Chapter 8, Listing 8-2
 *
 * Uses multiple threads to search the files 
 * "*.c" in the current directory for the string
 * given on the command line.
 *
 * This example avoids most C run-time functions
 * so that it can use the single-threaded
 * C libraries.
 *
 * It is necessary to use a critical section to
 * divvy up output to the screen or the various
 * threads end up with their output intermingled.
 * Normally the multithreaded C run-time does this 
 * automatically if you use printf.
 *
 */

#include <windows.h>
#include "MtVerify.h"

DWORD WINAPI SearchProc( void *arg );
BOOL GetLine( HANDLE hFile, LPSTR buf, DWORD size );

#define MAX_THREADS 3

HANDLE hThreadLimitSemaphore;    /* Counting semaphore */
HANDLE hConsoleOut;              /* Console output */
CRITICAL_SECTION ScreenCritical; /* Lock screen updates */

char szSearchFor[1024];

int main(int argc, char *argv[])
{
    WIN32_FIND_DATA *lpFindData;
    HANDLE hFindFile;
    HANDLE hThread;
    DWORD dummy;
    int i;

    hConsoleOut = GetStdHandle( STD_OUTPUT_HANDLE );

    if (argc != 2)
    {
        char errbuf[512];
        wsprintf(errbuf,
            "Usage: %s <search-string>\n",
            argv[0]);
        WriteFile( hConsoleOut,
            errbuf,
            strlen(errbuf),
            &dummy,
            FALSE );
        return EXIT_FAILURE;
    }

    /* Put search string where everyone can see it */
    strcpy(szSearchFor, argv[1]);

    /* Allocate a find buffer to be handed
     * to the first thread */
    lpFindData = HeapAlloc( GetProcessHeap(),
            HEAP_ZERO_MEMORY,
            sizeof(WIN32_FIND_DATA) );

    /* Semaphore prevents too many threads from running */
    MTVERIFY( hThreadLimitSemaphore = CreateSemaphore(
            NULL,   /* Security */
            MAX_THREADS,    /* Make all of them available */
            MAX_THREADS,    /* Allow a total of MAX_THREADS */
            NULL )          /* Unnamed */
         );

    InitializeCriticalSection(&ScreenCritical);

    hFindFile = FindFirstFile( "*.c", lpFindData );

    if (hFindFile == INVALID_HANDLE_VALUE)
        return EXIT_FAILURE;

    do {
        WaitForSingleObject( hThreadLimitSemaphore,
                        INFINITE );

        MTVERIFY( hThread = CreateThread(NULL,
                        0,
                        SearchProc,
                        lpFindData, // arglist
                        0,
                        &dummy )
         );

        MTVERIFY( CloseHandle( hThread ) );

        lpFindData = HeapAlloc( GetProcessHeap(),
                        HEAP_ZERO_MEMORY,
                        sizeof(WIN32_FIND_DATA) );

    } while ( FindNextFile( hFindFile, lpFindData ));

    FindClose( hFindFile );
    hFindFile = INVALID_HANDLE_VALUE;

    for (i=0; i<MAX_THREADS; i++)
        WaitForSingleObject( hThreadLimitSemaphore,
                        INFINITE );

    MTVERIFY( CloseHandle( hThreadLimitSemaphore ) );

    return EXIT_SUCCESS;
}


DWORD WINAPI SearchProc( void *arg )
{
    WIN32_FIND_DATA *lpFindData = (WIN32_FIND_DATA *)arg;
    char buf[1024];
    HANDLE hFile;
    DWORD dummy;

    hFile = CreateFile(lpFindData->cFileName,
                        GENERIC_READ,
                        FILE_SHARE_READ,
                        NULL,
                        OPEN_EXISTING,
                        FILE_FLAG_SEQUENTIAL_SCAN,
                        NULL
                    );
    if (!hFile)
        return 1;   /* Silently ignore problem files */

    while (GetLine(hFile, buf, sizeof(buf)))
    {
        /* Inefficient search strategy, but it's easy */
        if (strstr(buf, szSearchFor))
        {
            /* Make sure that this thread is the
             * only one writing to this handle */
            EnterCriticalSection( &ScreenCritical );

            WriteFile( hConsoleOut,
                lpFindData->cFileName,
                strlen(lpFindData->cFileName),
                &dummy,
                FALSE );
            WriteFile( hConsoleOut,
                ": ", 2, &dummy, FALSE );
            WriteFile( hConsoleOut,
                buf, strlen(buf), &dummy, FALSE );
            WriteFile( hConsoleOut,
                "\r\n", 2, &dummy, FALSE );

            LeaveCriticalSection( &ScreenCritical );
        }
    }

    CloseHandle(hFile);
    HeapFree( GetProcessHeap(), 0, lpFindData);

    MTVERIFY( ReleaseSemaphore( hThreadLimitSemaphore,
                                    1,
                                    NULL ) );
}

/*
 * Unlike fgets(), this routine throws away CR/LF
 * automatically.  Calling ReadFile() one character
 * at a time is slow, but this illustrates the
 * advantages of using stdio under some conditions
 * (because buffering the stream yourself is difficult)
 */
BOOL GetLine(HANDLE hFile, LPSTR buf, DWORD size)
{
    DWORD total = 0;
    DWORD numread;
    int state = 0;  /* 0 = Looking for non-newline */
                    /* 1 = Stop after first newline */

    for (;;)
    {
        if (total == size-1)
        {
            buf[size-1] = '\0';
            return TRUE;
        }
        if (!ReadFile(hFile, buf+total, 1, &numread, 0)
                || numread == 0)
        {
            buf[total] = '\0';
            return total != 0;
        }
        if (buf[total] == '\r' || buf[total] == '\n')
        {
            if (state == 0)
                continue;
            buf[total] = '\0';
            return TRUE;
        }
        state = 1;
        total++;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜碰碰视频| 国产综合久久久久影院| 国产精品久久久久久亚洲伦| 精品国产乱码久久久久久蜜臀| 久久久.com| 国产精品免费人成网站| 国产精品色在线观看| 国产精品美女久久久久久久网站| 久久精品无码一区二区三区| 国产精品萝li| 一区二区三区国产精品| 亚洲图片欧美色图| 天堂久久一区二区三区| 美女视频黄免费的久久 | 久久激情五月婷婷| 国产乱码精品一品二品| 成人午夜精品一区二区三区| 99久久精品国产一区| 一本大道久久a久久综合| 欧美日韩在线播放三区| 精品日韩一区二区三区| 国产农村妇女精品| 亚洲嫩草精品久久| 奇米色777欧美一区二区| 国产裸体歌舞团一区二区| 波多野结衣在线一区| 91久久奴性调教| 欧美v日韩v国产v| 中文字幕av一区二区三区高| 亚洲自拍偷拍九九九| 蜜臀精品久久久久久蜜臀 | 亚洲欧美福利一区二区| 午夜日韩在线电影| 成人夜色视频网站在线观看| 欧美色区777第一页| 久久久久成人黄色影片| 亚洲一二三四久久| 国产一区欧美日韩| 欧美日韩一卡二卡| 国产精品成人网| 久久精品国产秦先生| 99精品黄色片免费大全| 日韩欧美国产wwwww| 亚洲免费三区一区二区| 国产精品一级二级三级| 欧美日韩国产区一| 一色屋精品亚洲香蕉网站| 九一九一国产精品| 欧美高清性hdvideosex| 中文字幕在线一区| 国产最新精品免费| 9191久久久久久久久久久| 亚洲欧美中日韩| 久国产精品韩国三级视频| 欧美日韩不卡一区二区| 亚洲黄色在线视频| 国产精品1区2区| 日韩三级在线观看| 丝袜美腿亚洲综合| 欧美亚洲国产一区二区三区 | 欧洲人成人精品| 中文字幕在线观看不卡| 国产激情视频一区二区在线观看| 91麻豆精品国产91久久久更新时间 | 国产午夜精品一区二区三区嫩草| 视频一区欧美精品| 欧美日韩视频在线观看一区二区三区| 中文字幕成人在线观看| 国产一区久久久| 精品捆绑美女sm三区| 日本亚洲视频在线| 6080亚洲精品一区二区| 天天综合日日夜夜精品| 欧美视频一二三区| 亚洲国产精品自拍| 欧美日韩在线精品一区二区三区激情| 亚洲欧美日韩在线| 91在线精品一区二区| 国产精品色哟哟| 99久免费精品视频在线观看| 国产精品久久久久久久久久免费看 | 欧美日韩国产色站一区二区三区| 亚洲综合av网| 欧美精品视频www在线观看| 亚洲午夜国产一区99re久久| 欧美日本在线播放| 蜜桃视频在线观看一区| 久久久久国产精品厨房| 成人免费视频免费观看| 中文字幕一区av| 91官网在线免费观看| 亚洲mv在线观看| 日韩精品综合一本久道在线视频| 精品一区二区三区不卡| 久久精品水蜜桃av综合天堂| av中文字幕在线不卡| 一区二区三区成人| 欧美一二三四区在线| 国产电影精品久久禁18| 一区2区3区在线看| 精品免费视频一区二区| voyeur盗摄精品| 亚洲h精品动漫在线观看| 欧美精品一区二区精品网| 成人精品小蝌蚪| 天堂av在线一区| 国产欧美精品区一区二区三区| 91香蕉国产在线观看软件| 午夜精品成人在线| 久久久91精品国产一区二区精品 | 欧美午夜精品久久久久久超碰| 免费高清在线视频一区·| 亚洲国产激情av| 欧美日本国产一区| 成人免费视频app| 午夜欧美大尺度福利影院在线看| 国产网站一区二区| 91精品国产色综合久久ai换脸| 成人av免费在线| 国产综合色产在线精品| 婷婷综合另类小说色区| 国产嫩草影院久久久久| 日韩视频123| 欧美性生活影院| 99久久久久久| 国产一区二三区好的| 亚洲成人7777| 亚洲黄色av一区| 亚洲国产成人自拍| 精品电影一区二区三区| 精品视频在线免费| 色综合天天综合在线视频| 国产精品综合视频| 美女一区二区久久| 午夜一区二区三区在线观看| 一区二区中文视频| 国产日韩欧美高清在线| 欧美mv日韩mv亚洲| 日韩精品一区国产麻豆| 337p亚洲精品色噜噜狠狠| 日本韩国一区二区| 91在线丨porny丨国产| 国产成人免费在线观看不卡| 久久精品久久精品| 七七婷婷婷婷精品国产| 久久久美女艺术照精彩视频福利播放| 7777精品伊人久久久大香线蕉超级流畅| 国产精品色哟哟| www.在线欧美| 亚洲三级在线免费观看| 亚洲成人你懂的| 国产麻豆91精品| 色婷婷精品久久二区二区蜜臀av | 精品欧美乱码久久久久久| 亚洲国产精品传媒在线观看| 亚洲国产另类av| 国产高清视频一区| 欧美午夜电影在线播放| 久久久99免费| 天天操天天综合网| 99久久综合狠狠综合久久| 3d动漫精品啪啪一区二区竹菊| 国产欧美久久久精品影院| 亚洲线精品一区二区三区 | 欧美高清在线一区二区| 日本vs亚洲vs韩国一区三区二区 | 一区在线观看免费| 久久99国产精品久久99 | 亚洲国产精品国自产拍av| 视频在线观看一区二区三区| aaa欧美色吧激情视频| 精品乱人伦小说| 日韩中文字幕一区二区三区| 色中色一区二区| 中文字幕免费观看一区| 国内精品写真在线观看| 5月丁香婷婷综合| 亚洲成人动漫精品| 在线观看中文字幕不卡| 亚洲天堂网中文字| 国产.精品.日韩.另类.中文.在线.播放| 在线播放亚洲一区| 亚洲成人中文在线| 欧美在线观看视频一区二区| 中文字幕一区二区三区四区不卡| 国产一区二区三区四区五区入口| 8x福利精品第一导航| 亚洲大型综合色站| 欧美怡红院视频| 亚洲午夜一区二区| 欧美午夜视频网站| 亚洲午夜电影网| 欧美日韩五月天| 亚洲超碰97人人做人人爱| 欧美日韩一级片在线观看| 亚洲电影一区二区三区| 91久久精品一区二区三区| 亚洲最大的成人av| 欧美无砖砖区免费| 亚洲午夜激情网站|