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

            一本久久免费视频| 久久夜色精品国产噜噜麻豆| 国产一级持黄大片99久久| 精品无码久久久久久午夜| 国内精品久久久久久不卡影院| 久久av高潮av无码av喷吹| 国内精品伊人久久久久妇| 午夜久久久久久禁播电影 | 区久久AAA片69亚洲| 伊人久久综合精品无码AV专区| 久久Av无码精品人妻系列| 久久久久久一区国产精品| 人妻少妇久久中文字幕| 精品久久久久久久久久中文字幕 | 久久精品国产亚洲av水果派| 国产叼嘿久久精品久久| 无码人妻精品一区二区三区久久| 国产国产成人精品久久| 国产成人无码精品久久久性色| 国产高潮国产高潮久久久91 | 日韩欧美亚洲综合久久| 国产成人久久精品麻豆一区| 天天躁日日躁狠狠久久| 欧美精品丝袜久久久中文字幕| 97久久天天综合色天天综合色hd| 久久人妻无码中文字幕| 久久无码国产| 久久天天躁狠狠躁夜夜2020老熟妇| 国产精品无码久久综合| 久久人人爽人人爽人人片AV不| 久久伊人五月丁香狠狠色| 色播久久人人爽人人爽人人片aV | 亚洲v国产v天堂a无码久久| 大香网伊人久久综合网2020| 久久久久中文字幕| 999久久久无码国产精品| 国产精品久久久久aaaa| 日本三级久久网| 久久精品国产99久久久香蕉| 久久精品无码一区二区三区日韩| 久久精品免费大片国产大片|