処理を10秒でタイムアウトするには??


シュー  2006-05-26 02:42:18  No: 61939

Web上のソースを取りに行く処理を10秒でタイムアウトにしたいのですが、InternetSetOptionは使用できませんでした。マイクロソフトのページではWinInetを使用するか、スレッドの使用を推奨しているので、以下のURLを参考にしているのですが、うまく動きません。
http://support.microsoft.com/kb/224318/
スレッドの使い方がいまいち理解できないので、ご指導ねがいます。
よろしくお願いします。

<ソースコード>

g_hOpen = 0;
if ( !( g_hOpen = InternetOpen ( "TEST", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0 ) ) )
       {         
           printf("Error on InternetOpen: " );
           return ;
       }

       HANDLE   hThread; 
       DWORD    dwThreadID;
       threadParm.pHost = szHost;
       threadParm.pUser = szUser;
       threadParm.pPass = szPass;

       hThread = CreateThread(NULL,0,WorkerFunction,&threadParm,0,&dwThreadID);    

       dwTimeout = 5000; 
       if ( WaitForSingleObject ( hThread, dwTimeout ) == WAIT_TIMEOUT )
       {
           printf( "Can not connect to server in ");    
           if ( g_hOpen )
      InternetCloseHandle ( g_hOpen );
            WaitForSingleObject ( hThread, INFINITE );
            printf( "Thread has exited") ;
           return ;
       }
    
       dwExitCode = 0;
       if ( !GetExitCodeThread( hThread, &dwExitCode ) )
       {
           printf( "Error on GetExitCodeThread: ");
           return ;
       }
       CloseHandle (hThread);
       if ( dwExitCode )
          return ;
       if ( !InternetOpenUrl ( g_hOpen, "http://yahoo.co.jp/",
    NULL,0,INTERNET_FLAG_RELOAD,0))
       {
           printf( "Error on FtpGetFile: ");
           return ;
       }
       if ( g_hConnect )
           InternetCloseHandle( g_hConnect );
       if ( g_hOpen )
           InternetCloseHandle( g_hOpen );

       return ;
   }

<エラー文>
1>thre.obj : error LNK2019: 未解決の外部シンボル __imp__InternetOpenUrlA@24 が関数 _main で参照されました。
1>thre.obj : error LNK2019: 未解決の外部シンボル __imp__InternetCloseHandle@4 が関数 _main で参照されました。
1>thre.obj : error LNK2019: 未解決の外部シンボル __imp__InternetOpenA@20 が関数 _main で参照されました。
1>thre.obj : error LNK2019: 未解決の外部シンボル __imp__InternetConnectA@32 が関数 "unsigned long __stdcall WorkerFunction(void *)" (?WorkerFunction@@YGKPAX@Z) で参照されました。


  2006-05-26 02:55:13  No: 61940

スレッド云々の前にコンパイラのエラーぐらいちゃんと読もうよ…

wininet.libリンクしとけ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加