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) で参照されました。
スレッド云々の前にコンパイラのエラーぐらいちゃんと読もうよ…
wininet.libリンクしとけ
ツイート | ![]() |