• <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 閱讀(5965) 評論(0)  編輯 收藏 引用 所屬分類: VC

            久久99精品久久久久久水蜜桃| 久久国产免费| 欧美噜噜久久久XXX| 无码人妻精品一区二区三区久久| 色欲久久久天天天综合网| 亚洲va国产va天堂va久久| 精品午夜久久福利大片| 亚洲午夜无码AV毛片久久| 97久久综合精品久久久综合| 亚洲欧美一级久久精品| 亚洲狠狠婷婷综合久久蜜芽| 精品久久久久久国产牛牛app| 国产精品久久久久久久app| 久久99国产精品一区二区| 欧美国产精品久久高清| 久久国产美女免费观看精品 | 麻豆精品久久精品色综合| 久久天天婷婷五月俺也去| 国产精品久久久久久久久久免费| 久久精品www人人爽人人| 国产色综合久久无码有码| 蜜桃麻豆WWW久久囤产精品| 国内精品久久国产大陆| 精品久久久久久国产| 无码人妻少妇久久中文字幕蜜桃| 亚洲国产精品热久久| 品成人欧美大片久久国产欧美...| 成人综合久久精品色婷婷| 亚洲国产高清精品线久久| 国产精品免费久久久久影院| 狠狠色婷婷综合天天久久丁香| 无码精品久久久天天影视| 亚洲综合日韩久久成人AV| 久久久久久国产精品美女| 热99RE久久精品这里都是精品免费| 狠狠久久综合| 国内精品久久久久久久久电影网 | 亚洲午夜久久久久久久久久| 亚洲国产成人久久精品99 | 亚洲国产精品无码久久久不卡| 一本色综合久久|