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

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            WinInet編程中連接超時(shí)的解決方法

            在WinInet編程中,SetOption函數(shù)用來設(shè)置超時(shí),可經(jīng)過測試,無效。在MSDN文檔中明確指出“InternetSetOption Does Not Set Timeout Values”,微軟提出的解決方法是用線程來實(shí)現(xiàn),示例代碼如下:
              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 

            一個(gè)老外寫的同步類
            W3C  w3csample

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

            精品午夜久久福利大片| 亚洲国产另类久久久精品小说 | 99久久综合狠狠综合久久| 国产精品99久久精品| 久久久久国色AV免费观看| 久久人人爽人人爽人人片AV高清| 亚洲国产精品无码成人片久久| 久久久精品一区二区三区| 亚洲精品综合久久| 97精品伊人久久久大香线蕉 | 奇米综合四色77777久久| 国产精品久久亚洲不卡动漫| 久久夜色精品国产亚洲av| 日产精品久久久一区二区| 久久中文字幕无码专区 | 成人午夜精品久久久久久久小说 | 伊人久久精品影院| 久久无码av三级| 久久人人爽爽爽人久久久| 亚洲国产天堂久久久久久| 久久精品国产亚洲一区二区| 97精品国产97久久久久久免费| 久久99国产亚洲高清观看首页| 亚洲中文久久精品无码ww16| 久久精品免费网站网| 91性高湖久久久久| 国产精品九九久久免费视频| 婷婷久久久亚洲欧洲日产国码AV| 少妇被又大又粗又爽毛片久久黑人 | 亚洲欧美国产精品专区久久| AA级片免费看视频久久| 97超级碰碰碰久久久久| 77777亚洲午夜久久多喷| 国产精品久久久久AV福利动漫| 一本色道久久99一综合| 亚洲va久久久噜噜噜久久天堂| 精品久久久久久无码不卡| 色婷婷狠狠久久综合五月| 少妇久久久久久被弄到高潮| 日韩一区二区三区视频久久| 午夜精品久久久久|