いつもお世話になります。
以下のコードで、サーバーから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;
何をしたいのかがわかりません。
HTTP_QUERY_DATE:メッセージの作成時刻。
らしいですよ。
ググったらサンプル付きで出てきました。
http://nienie.com/~masapico/api_HttpQueryInfo.html
※タイムサーバーに接続して標準時刻を得ようということではないのですよね?(だとすると全く違いますよ。)
この手のプログラムはサーバーが返すまでに時間がかかり
その間固まるのでGetMyServerTime をスレッドから呼び出してるのかな?
だとすると
>1スレッドのはずが6か7スレッドで動作し
はGetMyServerTimeではなく、そのスレッドの問題だと思うんだけど?
ツイート | ![]() |