掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WinInetでメモリが (ID:31010)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になります。 以下のコードで、サーバーからHttpで時刻を取ってくるようにした のですが、1スレッドのはずが6か7スレッドで動作し、メモリ使用 量が4M弱から70M程度に増加していました。 他のソフトで付加がかかった時動作が重くなるので、 メモリ使用量を減らせる方法か?他の方法でhttpで時間取得する方法 はないでしょうか? 尚、LANがつながっていない特はNOWで時間を取ってくるようにしています。 よろしくお願いします。 ses Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, StdCtrls, OneInstance, ShellAPI, WinInet, DateUtils, ExtCtrls; 以下省略 function GetMyServerTime : TDateTime ; const // Httpで時間取得するサーバー名 URL = 'http://10.1.1.101/'; var InetHandle, IOpenHandle: HINTERNET; Buffer: array[0..255] of Char; BufSize, Dummy: Cardinal; Y, M, D, H, N, S: Word; MStr: String; HttpDateTime: TDateTime; begin Result := Now; InetHandle := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try if (not Assigned(InetHandle)) then begin Exit; end; IOpenHandle := InternetOpenUrl(InetHandle, URL, nil, 0, INTERNET_FLAG_RELOAD, 0); try if (not Assigned(IOpenHandle)) then begin Exit; end; BufSize := Length(Buffer); FillChar(Buffer, BufSize, 0); Dummy := 0; if HttpQueryInfo(IOpenHandle, HTTP_QUERY_DATE, @Buffer, BufSize, Dummy) then begin Y := StrToIntDef(Copy(Buffer, 13, 4), 0); MStr := LowerCase(Copy(Buffer, 9, 3)); if (MStr = 'jan') then M := 1 else if (MStr = 'feb') then M := 2 else if (MStr = 'mar') then M := 3 else if (MStr = 'apr') then M := 4 else if (MStr = 'may') then M := 5 else if (MStr = 'jun') then M := 6 else if (MStr = 'jul') then M := 7 else if (MStr = 'aug') then M := 8 else if (MStr = 'sep') then M := 9 else if (MStr = 'oct') then M := 10 else if (MStr = 'nov') then M := 11 else if (MStr = 'dec') then M := 12 else M := 0; D := StrToIntDef(Copy(Buffer, 6, 2), 0); H := StrToIntDef(Copy(Buffer, 18, 2), MAXWORD); N := StrToIntDef(Copy(Buffer, 21, 2), MAXWORD); S := StrToIntDef(Copy(Buffer, 24, 2), MAXWORD); // なぜか世界標準時が返されるので、 Hに +9時間としている。 if TryEncodeDateTime(Y, M, D, H + 9, N, S, 0, HttpDateTime) then Result := HttpDateTime else Result := now; end; finally InternetCloseHandle(IOpenHandle); end; finally InternetCloseHandle(InetHandle); end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.