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

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            WinInet編程中連接超時的解決方法

            在WinInet編程中,SetOption函數用來設置超時,可經過測試,無效。在MSDN文檔中明確指出“InternetSetOption Does Not Set Timeout Values”,微軟提出的解決方法是用線程來實現,示例代碼如下:
              1 #include <windows.h>
              2    #include <wininet.h>
              3    #include <iostream.h>
              4 
              5    DWORD WINAPI WorkerFunction( LPVOID ); 
              6    HINTERNET g_hOpen, g_hConnect;
              7 
              8    typedef struct 
              9    {
             10        CHAR* pHost;
             11        CHAR* pUser;
             12        CHAR* pPass;
             13    } PARM;
             14 
             15    void main()
             16    {
             17        CHAR    szHost[] = "localhost";
             18        CHAR    szUser[] = "JoeB";
             19        CHAR    szPass[] = "test";
             20        CHAR    szLocalFile[] = "localfile";
             21        CHAR    szRemoteFile[] = "remotefile";
             22        DWORD   dwExitCode;
             23        DWORD   dwTimeout;
             24        PARM    threadParm;
             25 
             26        g_hOpen = 0;
             27        if ( !( g_hOpen = InternetOpen ( "FTP sample"
             28                                         LOCAL_INTERNET_ACCESS, 
             29                                         NULL, 
             30                                         0
             31                                         0 ) ) )
             32        {         
             33            cerr << "Error on InternetOpen: " << GetLastError() << endl;
             34            return ;
             35        }
             36 
             37        // Create a worker thread 
             38        HANDLE   hThread; 
             39        DWORD    dwThreadID;
             40        threadParm.pHost = szHost;
             41        threadParm.pUser = szUser;
             42        threadParm.pPass = szPass;
             43 
             44        hThread = CreateThread(
             45                      NULL,            // Pointer to thread security attributes 
             46                      0,               // Initial thread stack size, in bytes 
             47                      WorkerFunction,  // Pointer to thread function 
             48                      &threadParm,     // The argument for the new thread
             49                      0,               // Creation flags 
             50                      &dwThreadID      // Pointer to returned thread identifier 
             51                  );    
             52 
             53        // Wait for the call to InternetConnect in worker function to complete
             54        dwTimeout = 5000// in milliseconds
             55        if ( WaitForSingleObject ( hThread, dwTimeout ) == WAIT_TIMEOUT )
             56        {
             57            cout << "Can not connect to server in " 
             58                 << dwTimeout << " milliseconds" << endl;
             59            if ( g_hOpen )
             60    InternetCloseHandle ( g_hOpen );
             61            // Wait until the worker thread exits
             62            WaitForSingleObject ( hThread, INFINITE );
             63            cout << "Thread has exited" << endl;
             64            return ;
             65        }
             66     
             67        // The state of the specified object (thread) is signaled
             68        dwExitCode = 0;
             69        if ( !GetExitCodeThread( hThread, &dwExitCode ) )
             70        {
             71            cerr << "Error on GetExitCodeThread: " << GetLastError() << endl;
             72            return ;
             73        }
             74 
             75        CloseHandle (hThread);
             76        if ( dwExitCode )
             77        // Worker function failed
             78           return ;
             79     
             80        if ( !FtpGetFile ( g_hConnect, 
             81                           szRemoteFile,
             82                           szLocalFile,
             83                           FALSE,INTERNET_FLAG_RELOAD, 
             84                           FTP_TRANSFER_TYPE_ASCII,
             85                           0 ) )
             86        {
             87            cerr << "Error on FtpGetFile: " << GetLastError() << endl;
             88            return ;
             89        }
             90 
             91        if ( g_hConnect )
             92            InternetCloseHandle( g_hConnect );
             93        if ( g_hOpen )
             94            InternetCloseHandle( g_hOpen );
             95 
             96        return ;
             97    }
             98 
             99    /////////////////// WorkerFunction /////////////////////
            100    DWORD WINAPI 
            101    WorkerFunction(
            102        IN LPVOID vThreadParm
            103    )
            104    /*
            105    Purpose:
            106        Call InternetConnect to establish a FTP session  
            107    Arguments:
            108        vThreadParm - points to PARM passed to thread
            109    Returns:
            110        returns 0  
            111    */ 
            112    {
            113        PARM* pThreadParm;
            114        // Initialize local pointer to void pointer passed to thread
            115        pThreadParm = (PARM*)vThreadParm;
            116        g_hConnect = 0;
            117     
            118        if ( !( g_hConnect = InternetConnect (
            119                                 g_hOpen, 
            120                                 pThreadParm->pHost,
            121                                 INTERNET_INVALID_PORT_NUMBER,
            122                                 pThreadParm->pUser,
            123 pThreadParm->pPass,
            124                                 INTERNET_SERVICE_FTP, 
            125                                 0,
            126                                 0 ) ) )
            127        {
            128            cerr << "Error on InternetConnnect: " << GetLastError() << endl;
            129            return 1// failure
            130        }
            131        
            132        return 0;  // success
            133    }
            134 

            一個老外寫的同步類
            W3C  w3csample

            posted on 2009-05-17 16:17 Benjamin 閱讀(5961) 評論(0)  編輯 收藏 引用 所屬分類: VC

            精品久久久久久无码免费| 国产午夜福利精品久久2021 | 久久91精品国产91久久户| 精品综合久久久久久888蜜芽| 日本强好片久久久久久AAA| 国产精品久久久久9999高清| 青青草原综合久久大伊人精品| 欧美激情精品久久久久久| 无遮挡粉嫩小泬久久久久久久| 国产欧美久久一区二区| 亚洲国产精品无码久久九九| 久久99精品久久久久久久不卡| 国产福利电影一区二区三区久久久久成人精品综合| 国产精品丝袜久久久久久不卡| 亚洲中文久久精品无码ww16| 国产巨作麻豆欧美亚洲综合久久 | 久久精品无码一区二区WWW| AV色综合久久天堂AV色综合在| 精品国产青草久久久久福利 | 97精品伊人久久久大香线蕉| 久久99九九国产免费看小说| 欧美一区二区精品久久| 国内精品综合久久久40p| 久久一区二区免费播放| 国产欧美久久久精品| 久久久久免费看成人影片| 91久久精品视频| 国产麻豆精品久久一二三| 伊人久久大香线蕉av不卡| 国产99久久久国产精品小说| 久久人人爽人人精品视频| 国产午夜精品久久久久九九电影| 99久久婷婷免费国产综合精品| 乱亲女H秽乱长久久久| 国产精品成人久久久| 97香蕉久久夜色精品国产 | 欧美亚洲色综久久精品国产| 午夜精品久久久久| 久久中文字幕人妻丝袜| 精品国产乱码久久久久久人妻| 香蕉久久夜色精品国产2020|