diff --git a/TTProxy/ProxyWSockHook.h b/TTProxy/ProxyWSockHook.h index a571a641e..be2725d51 100644 --- a/TTProxy/ProxyWSockHook.h +++ b/TTProxy/ProxyWSockHook.h @@ -471,7 +471,7 @@ class ProxyWSockHook { in_addr addr; struct in6_addr addr6; char* buffer; - DWORD time; + ULONGLONG time; ConnectionInfo(ProxyInfo& proxy, String realhost):proxy(proxy), realhost(realhost), buffer(NULL) { } ~ConnectionInfo() { @@ -664,7 +664,7 @@ class ProxyWSockHook { ConnectionInfo* info = table.get(url); ::LeaveCriticalSection(§ion); if (info != NULL) { - info->time = ::GetTickCount(); + info->time = ::GetTickCount64(); return info; } ProxyInfo proxy; @@ -688,8 +688,8 @@ class ProxyWSockHook { } } if (i >= countof(list)) { - DWORD now = ::GetTickCount(); - DWORD max = 0; + ULONGLONG now = ::GetTickCount64(); + ULONGLONG max = 0; int index = -1; for (i = 0; i < countof(list); i++) { if (list[i] != NULL) { @@ -709,7 +709,7 @@ class ProxyWSockHook { info->addr6.s6_addr[11] = 0xff; info->addr6.s6_addr[15] = i + 1; - info->time = ::GetTickCount(); + info->time = ::GetTickCount64(); return info; } }; diff --git a/doc/en/html/macro/command/uptime.html b/doc/en/html/macro/command/uptime.html index 94df65479..46fe47000 100644 --- a/doc/en/html/macro/command/uptime.html +++ b/doc/en/html/macro/command/uptime.html @@ -17,12 +17,22 @@

uptime

Gets System Up Time. (version 4.81 or later)

+

1) Format 1

+
 uptime <intvar>
 
+

2) Format 2

+ +
+uptime <secvar> <msecvar>
+
+

Remarks

+

Format 1

+

Retrieves the number of milliseconds that have elapsed since the Windows OS was started, and then stores the value into the <intvar> variable. @@ -32,11 +42,29 @@

Remarks

The time wraps around to zero if the system is run continuously for 49.7 days.

+

Format 2

+ +

+Retrieves the number of milliseconds that have elapsed since the Windows OS was started +using GetTickCount64(), and then stores the following values: +

+ +
+
<secvar>
+
Windows OS uptime in seconds (GetTickCount64() / 1000)
+
<msecvar>
+
Sub-second portion of the uptime in milliseconds (GetTickCount64() % 1000)
+
+ +

+Both <secvar> and <msecvar> must be integer variables. +

+

Example

-; How to get the uptime in Windows
+; Format 1: How to get the uptime in Windows
 uptime var
 day = var / 86400000
 var = var % 86400000
@@ -61,5 +89,12 @@ 

Example

messagebox str "running time"
+
+; Format 2: Get uptime as seconds and milliseconds
+uptime sec msec
+sprintf2 str "System Up Time: %d.%03d seconds" sec msec
+messagebox str "uptime"
+
+ diff --git a/doc/ja/html/macro/command/uptime.html b/doc/ja/html/macro/command/uptime.html index 6778ddc58..6b0ca3279 100644 --- a/doc/ja/html/macro/command/uptime.html +++ b/doc/ja/html/macro/command/uptime.html @@ -17,11 +17,21 @@

uptime

OSの稼働時間を取得する。(バージョン4.81以降)

+

1) 形式1

+
 uptime <intvar>
 
-

解説

+

2) 形式2

+ +
+uptime <secvar> <msecvar>
+
+ +

説明

+ +

形式1

Windows OSの稼働時間(ミリ秒)を <intvar> に格納する。 @@ -31,11 +41,28 @@

※稼働時間が49日を経過すると、0に戻る。

+

形式2

+ +

+GetTickCount64() を使ってWindows OSの稼働時間を取得し、下記の値を格納する。 +

+ +
+
<secvar>
+
Windows OSの稼働時間(秒単位)(GetTickCount64() / 1000)
+
<msecvar>
+
稼働時間の1秒未満の部分(ミリ秒単位)(GetTickCount64() % 1000)
+
+ +

+<secvar> と <msecvar> はともに整数型変数でなければならない。 +

+

-; How to get the uptime in Windows
+; 形式1: Windowsの稼働時間を取得する例
 uptime var
 day = var / 86400000
 var = var % 86400000
@@ -60,5 +87,12 @@ 

messagebox str "running time"

+
+; 形式2: 稼働時間を秒とミリ秒で取得する例
+uptime sec msec
+sprintf2 str "System Up Time: %d.%03d seconds" sec msec
+messagebox str "uptime"
+
+ diff --git a/teraterm/common/compat_win.cpp b/teraterm/common/compat_win.cpp index 50697632c..5dee78c74 100644 --- a/teraterm/common/compat_win.cpp +++ b/teraterm/common/compat_win.cpp @@ -239,7 +239,7 @@ static HWND WINAPI GetConsoleWindowLocal(void) } // Format a "unique" NewWindowTitle. - wsprintfA(pszNewWindowTitle, "%d/%d", GetTickCount(), GetCurrentProcessId()); + wsprintfA(pszNewWindowTitle, "%I64u/%d", GetTickCount64(), GetCurrentProcessId()); // Change current window title. SetConsoleTitleA(pszNewWindowTitle); diff --git a/teraterm/common/dlglib.c b/teraterm/common/dlglib.c index 25e515aec..164f46e90 100644 --- a/teraterm/common/dlglib.c +++ b/teraterm/common/dlglib.c @@ -153,13 +153,14 @@ void SetDlgPercent(HWND HDlg, int id_Item, int id_Progress, LONG a, LONG b, int } } -void SetDlgTime(HWND HDlg, int id_Item, DWORD stime, int bytes) +void SetDlgTime(HWND HDlg, int id_Item, ULONGLONG stime, int bytes) { - static int prev_elapsed; - int elapsed, rate; + static ULONGLONG prev_elapsed; + ULONGLONG elapsed; + int rate; wchar_t buff[64]; - elapsed = (GetTickCount() - stime) / 1000; + elapsed = (GetTickCount64() - stime) / 1000; if (elapsed == 0) { prev_elapsed = 0; @@ -172,15 +173,15 @@ void SetDlgTime(HWND HDlg, int id_Item, DWORD stime, int bytes) } prev_elapsed = elapsed; - rate = bytes / elapsed; + rate = (int)(bytes / elapsed); if (rate < 1200) { - _snwprintf_s(buff, _countof(buff), _TRUNCATE, L"%d:%02d (%dBytes/s)", elapsed / 60, elapsed % 60, rate); + _snwprintf_s(buff, _countof(buff), _TRUNCATE, L"%llu:%02llu (%dBytes/s)", elapsed / 60, elapsed % 60, rate); } else if (rate < 1200000) { - _snwprintf_s(buff, _countof(buff), _TRUNCATE, L"%d:%02d (%d.%02dKB/s)", elapsed / 60, elapsed % 60, rate / 1000, rate / 10 % 100); + _snwprintf_s(buff, _countof(buff), _TRUNCATE, L"%llu:%02llu (%d.%02dKB/s)", elapsed / 60, elapsed % 60, rate / 1000, rate / 10 % 100); } else { - _snwprintf_s(buff, _countof(buff), _TRUNCATE, L"%d:%02d (%d.%02dMB/s)", elapsed / 60, elapsed % 60, rate / (1000 * 1000), rate / 10000 % 100); + _snwprintf_s(buff, _countof(buff), _TRUNCATE, L"%llu:%02llu (%d.%02dMB/s)", elapsed / 60, elapsed % 60, rate / (1000 * 1000), rate / 10000 % 100); } SetDlgItemTextW(HDlg, id_Item, buff); diff --git a/teraterm/common/dlglib.h b/teraterm/common/dlglib.h index ad5989da4..66c82bf60 100644 --- a/teraterm/common/dlglib.h +++ b/teraterm/common/dlglib.h @@ -44,7 +44,7 @@ void SetRB(HWND HDlg, int R, int FirstId, int LastId); void GetRB(HWND HDlg, LPWORD R, int FirstId, int LastId); void SetDlgNum(HWND HDlg, int id_Item, LONG Num); void SetDlgPercent(HWND HDlg, int id_Item, int id_Progress, LONG a, LONG b, int *prog); -void SetDlgTime(HWND HDlg, int id_Item, DWORD elapsed, int bytes); +void SetDlgTime(HWND HDlg, int id_Item, ULONGLONG elapsed, int bytes); void SetDropDownList(HWND HDlg, int Id_Item, const char *List[], int nsel); void SetDropDownListW(HWND HDlg, int Id_Item, const wchar_t *List[], int nsel); LONG GetCurSel(HWND HDlg, int Id_Item); diff --git a/teraterm/common/ttlib.c b/teraterm/common/ttlib.c index 12d865a08..dab3e45c4 100644 --- a/teraterm/common/ttlib.c +++ b/teraterm/common/ttlib.c @@ -956,24 +956,24 @@ char *mctimelocal(const char *format, BOOL utc_flag) * @return 邨碁℃譎る俣縺ョ譁蟄怜 * 荳崎ヲ√↓縺ェ縺」縺溘ifree()縺吶k縺薙→ */ -char *strelapsed(DWORD start_time) +char *strelapsed(ULONGLONG start_time) { size_t sizeof_strtime = 20; char *strtime = malloc(sizeof_strtime); int days, hours, minutes, seconds, msecs; - DWORD delta = GetTickCount() - start_time; + ULONGLONG delta = GetTickCount64() - start_time; - msecs = delta % 1000; + msecs = (int)(delta % 1000); delta /= 1000; - seconds = delta % 60; + seconds = (int)(delta % 60); delta /= 60; - minutes = delta % 60; + minutes = (int)(delta % 60); delta /= 60; - hours = delta % 24; - days = delta / 24; + hours = (int)(delta % 24); + days = (int)(delta / 24); _snprintf_s(strtime, sizeof_strtime, _TRUNCATE, "%d %02d:%02d:%02d.%03d", diff --git a/teraterm/common/ttlib.h b/teraterm/common/ttlib.h index 498cc4823..13492cb0e 100644 --- a/teraterm/common/ttlib.h +++ b/teraterm/common/ttlib.h @@ -137,7 +137,7 @@ DllExport BOOL HasMultiMonitorSupport(); DllExport BOOL HasDnsQuery(); DllExport BOOL HasBalloonTipSupport(); DllExport char *mctimelocal(const char *format, BOOL utc_flag); -char *strelapsed(DWORD start_time); +char *strelapsed(ULONGLONG start_time); void b64encode(PCHAR dst, int dsize, PCHAR src, int len); DllExport int b64decode(PCHAR dst, int dsize, PCHAR src); diff --git a/teraterm/common/tttypes.h b/teraterm/common/tttypes.h index 530f76778..1c9394787 100644 --- a/teraterm/common/tttypes.h +++ b/teraterm/common/tttypes.h @@ -869,7 +869,7 @@ typedef struct { void *NotifyIcon; - DWORD ConnectedTime; + ULONGLONG ConnectedTime; void (*Log1Byte)(BYTE b); void (*Log1Bin)(BYTE b); diff --git a/teraterm/teraterm/buffer.c b/teraterm/teraterm/buffer.c index 4a196fc26..71ce82cca 100644 --- a/teraterm/teraterm/buffer.c +++ b/teraterm/teraterm/buffer.c @@ -115,7 +115,7 @@ static BOOL BoxSelect; // TRUE=遏ゥ蠖「驕ク謚 / FALSE=陦碁∈謚 static POINT ClickCell; // 繧ッ繝ェ繝繧ッ縺励◆譁蟄幼ell static POINT SelectStartOld; // 謠冗判縺励◆驕ク謚樣伜沺縲《tart static POINT SelectEndOld; // 謠冗判縺励◆驕ク謚樣伜沺縲‘nd -static DWORD SelectStartTime; +static ULONGLONG SelectStartTime; static POINT DblClkStart; static POINT DblClkEnd; @@ -4749,7 +4749,7 @@ void BuffStartSelect(int Xw, int Yw, BOOL Box, BOOL Shift) Selected = FALSE; // 驕ク謚樣幕蟋九ぎ繝シ繝 - SelectStartTime = GetTickCount(); + SelectStartTime = GetTickCount64(); Selecting = FALSE; // push菴咲スョ @@ -4778,7 +4778,7 @@ void BuffChangeSelect(int Xw, int Yw, int NClick) if (!Selecting) { // 驕ク謚槭ぎ繝シ繝? - if (GetTickCount() - SelectStartTime < ts.SelectStartDelay) { + if (GetTickCount64() - SelectStartTime < ts.SelectStartDelay) { // 繧ャ繝シ繝我クュ return; } @@ -4889,7 +4889,7 @@ void BuffEndSelect(int Xw, int Yw) (void)Xw; (void)Yw; if (!Selecting) { - if (GetTickCount() - SelectStartTime < ts.SelectStartDelay) { + if (GetTickCount64() - SelectStartTime < ts.SelectStartDelay) { // 繧ャ繝シ繝画凾髢謎サ・蜀縺ェ繧 // 驕ク謚樣伜沺隗」髯、 SelectEnd = SelectStart; diff --git a/teraterm/teraterm/commlib.c b/teraterm/teraterm/commlib.c index 7a9942ddf..92c5125ff 100644 --- a/teraterm/teraterm/commlib.c +++ b/teraterm/teraterm/commlib.c @@ -805,7 +805,7 @@ void CommStart(PComVar cv, LONG lParam, PTTSet ts) break; } cv->Ready = TRUE; - cv->ConnectedTime = GetTickCount(); + cv->ConnectedTime = GetTickCount64(); } BOOL CommCanClose(PComVar cv) diff --git a/teraterm/teraterm/filesys.cpp b/teraterm/teraterm/filesys.cpp index 70472fc85..cdcfc59aa 100644 --- a/teraterm/teraterm/filesys.cpp +++ b/teraterm/teraterm/filesys.cpp @@ -66,7 +66,7 @@ typedef struct { LONG FileSize; // uint64_t FileSize; TODO LONG ByteCount; // uint64_t ByteCount; - DWORD StartTime; + ULONGLONG StartTime; BOOL FilePause; BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode; @@ -118,7 +118,7 @@ static BOOL OpenFTDlg(PFileVar fv) free(DlgCaption); fv->FilePause = FALSE; - fv->StartTime = GetTickCount(); + fv->StartTime = GetTickCount64(); fv->SendDlg = FTDlg; /* File send */ return TRUE; diff --git a/teraterm/teraterm/filesys_log.cpp b/teraterm/teraterm/filesys_log.cpp index 26eb3ddf6..70e7ca54d 100644 --- a/teraterm/teraterm/filesys_log.cpp +++ b/teraterm/teraterm/filesys_log.cpp @@ -69,7 +69,7 @@ typedef struct { LONG FileSize; // ? 菴ソ縺」縺ヲ縺縺ェ縺 LONG ByteCount; // 繝輔ぃ繧、繝ォ繧オ繧、繧コ - DWORD StartTime; + ULONGLONG StartTime; enum enumLineEnd eLineEnd; @@ -406,7 +406,7 @@ static BOOL LogStart(PFileVar fv, const wchar_t *fname) } fv->IsPause = FALSE; - fv->StartTime = GetTickCount(); + fv->StartTime = GetTickCount64(); if (ts.DeferredLogWriteMode) { StartThread(fv); diff --git a/teraterm/teraterm/filesys_proto.cpp b/teraterm/teraterm/filesys_proto.cpp index ec9ce6b77..dd36acc20 100644 --- a/teraterm/teraterm/filesys_proto.cpp +++ b/teraterm/teraterm/filesys_proto.cpp @@ -92,7 +92,7 @@ static PFileVarProto FileVar = NULL; static PProtoDlg PtDlg = NULL; static BOOL cv_ProtoFlag = FALSE; -static void _SetDlgTime(TFileVarProto *fv, DWORD elapsed, int bytes) +static void _SetDlgTime(TFileVarProto *fv, ULONGLONG elapsed, int bytes) { SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, elapsed, bytes); } diff --git a/teraterm/teraterm/filesys_proto.h b/teraterm/teraterm/filesys_proto.h index 0936ec6ec..8933d3ff7 100644 --- a/teraterm/teraterm/filesys_proto.h +++ b/teraterm/teraterm/filesys_proto.h @@ -153,7 +153,7 @@ typedef TFileVarProto *PFileVarProto; // UI縺ェ縺ゥ諠蝣ア陦ィ遉コ逕ィ髢「謨ー typedef struct InfoOp_ { void (*InitDlgProgress)(struct FileVarProto *fv, int *CurProgStat); - void (*SetDlgTime)(struct FileVarProto *fv, DWORD elapsed, int bytes); + void (*SetDlgTime)(struct FileVarProto *fv, ULONGLONG elapsed, int bytes); void (*SetDlgPacketNum)(struct FileVarProto *fv, LONG Num); void (*SetDlgByteCount)(struct FileVarProto *fv, LONG Num); void (*SetDlgPercent)(struct FileVarProto *fv, LONG a, LONG b, int *p); diff --git a/teraterm/teraterm/ftdlg.cpp b/teraterm/teraterm/ftdlg.cpp index 66009075c..214d93250 100644 --- a/teraterm/teraterm/ftdlg.cpp +++ b/teraterm/teraterm/ftdlg.cpp @@ -151,13 +151,13 @@ void CFileTransDlg::ChangeButton(BOOL PauseFlag) } } -void CFileTransDlg::RefreshNum(DWORD StartTime, LONG FileSize, LONG ByteCount) +void CFileTransDlg::RefreshNum(ULONGLONG StartTime, LONG FileSize, LONG ByteCount) { char NumStr[24]; double rate; int rate2; - static DWORD prev_elapsed; - DWORD elapsed; + static ULONGLONG prev_elapsed; + ULONGLONG elapsed; if (OpId == OpSendFile) { if (StartTime == 0) { @@ -165,17 +165,17 @@ void CFileTransDlg::RefreshNum(DWORD StartTime, LONG FileSize, LONG ByteCount) prev_elapsed = 0; } else { - elapsed = (GetTickCount() - StartTime) / 1000; + elapsed = (GetTickCount64() - StartTime) / 1000; if (elapsed != prev_elapsed && elapsed != 0) { - rate2 = ByteCount / elapsed; + rate2 = (int)(ByteCount / elapsed); if (rate2 < 1200) { - _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%d:%02d (%dBytes/s)", elapsed / 60, elapsed % 60, rate2); + _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%llu:%02llu (%dBytes/s)", elapsed / 60, elapsed % 60, rate2); } else if (rate2 < 1200000) { - _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%d:%02d (%d.%02dKB/s)", elapsed / 60, elapsed % 60, rate2 / 1000, rate2 / 10 % 100); + _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%llu:%02llu (%d.%02dKB/s)", elapsed / 60, elapsed % 60, rate2 / 1000, rate2 / 10 % 100); } else { - _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%d:%02d (%d.%02dMB/s)", elapsed / 60, elapsed % 60, rate2 / (1000*1000), rate2 / 10000 % 100); + _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%llu:%02llu (%d.%02dMB/s)", elapsed / 60, elapsed % 60, rate2 / (1000*1000), rate2 / 10000 % 100); } SetDlgItemText(IDC_TRANS_ETIME, NumStr); prev_elapsed = elapsed; diff --git a/teraterm/teraterm/ftdlg.h b/teraterm/teraterm/ftdlg.h index 5283598c4..6d3e83444 100644 --- a/teraterm/teraterm/ftdlg.h +++ b/teraterm/teraterm/ftdlg.h @@ -57,7 +57,7 @@ class CFileTransDlg : public TTCDialog BOOL Create(HINSTANCE hInstance, Info *info); void ChangeButton(BOOL PauseFlag); - void RefreshNum(DWORD StartTime, LONG FileSize, LONG ByteCount); + void RefreshNum(ULONGLONG StartTime, LONG FileSize, LONG ByteCount); private: virtual BOOL OnCancel(); diff --git a/teraterm/teraterm/ftdlg_lite.cpp b/teraterm/teraterm/ftdlg_lite.cpp index 44558e98e..1461ef283 100644 --- a/teraterm/teraterm/ftdlg_lite.cpp +++ b/teraterm/teraterm/ftdlg_lite.cpp @@ -174,8 +174,8 @@ class PrivateData : public TTCDialog BOOL Pause; BOOL check_2sec; BOOL show; - DWORD prev_elapsed; - DWORD StartTime; + ULONGLONG prev_elapsed; + ULONGLONG StartTime; BOOL HideDialog; CFileTransLiteDlg::Observer *observer_; @@ -215,7 +215,7 @@ BOOL CFileTransLiteDlg::Create(HINSTANCE hInstance, HWND hParent, const wchar_t } pData->SetDlgItemTextA(IDC_TRANS_ETIME, "0:00"); - pData->StartTime = GetTickCount(); + pData->StartTime = GetTickCount64(); pData->prev_elapsed = 0; return Ok; @@ -232,10 +232,10 @@ void CFileTransLiteDlg::RefreshNum(size_t ByteCount, size_t FileSize) return; } - const DWORD now = GetTickCount(); + const ULONGLONG now = GetTickCount64(); if (!pData->check_2sec) { - DWORD elapsed_ms = now - pData->StartTime; + ULONGLONG elapsed_ms = now - pData->StartTime; if (elapsed_ms > 2 * 1000) { // 2sec邨碁℃ pData->check_2sec = TRUE; @@ -247,10 +247,10 @@ void CFileTransLiteDlg::RefreshNum(size_t ByteCount, size_t FileSize) } char NumStr[24]; - DWORD elapsed = (now - pData->StartTime) / 1000; + ULONGLONG elapsed = (now - pData->StartTime) / 1000; if (elapsed != pData->prev_elapsed && elapsed != 0) { char elapsed_str[24]; - _snprintf_s(elapsed_str, sizeof(elapsed_str), _TRUNCATE, "%ld:%02ld", + _snprintf_s(elapsed_str, sizeof(elapsed_str), _TRUNCATE, "%llu:%02llu", elapsed / 60, elapsed % 60); char speed_str[24]; diff --git a/teraterm/teraterm/sendmem.cpp b/teraterm/teraterm/sendmem.cpp index 615299de2..465b609f5 100644 --- a/teraterm/teraterm/sendmem.cpp +++ b/teraterm/teraterm/sendmem.cpp @@ -82,7 +82,7 @@ typedef struct SendMemTag { size_t send_left; size_t send_index; BOOL waited; - DWORD last_send_tick; + ULONGLONG last_send_tick; // CFileTransLiteDlg *dlg; class SendMemDlgObserver *dlg_observer; @@ -377,7 +377,7 @@ void SendMemContinuously(void) } if (p->waited) { - if (GetTickCount() - p->last_send_tick < p->delay_tick) { + if (GetTickCount64() - p->last_send_tick < p->delay_tick) { // 繧ヲ繧ィ繧、繝医☆繧 return; } @@ -518,7 +518,7 @@ void SendMemContinuously(void) if (p->send_left != 0 && need_delay) { // wait縺ォ蜈・繧 p->waited = TRUE; - p->last_send_tick = GetTickCount(); + p->last_send_tick = GetTickCount64(); // 繧ソ繧、繝槭シ縺ッidle繧貞虚菴懊&縺帙k縺溘a縺ォ菴ソ逕ィ縺励※縺繧 SetTimer(p->hWnd, p->timer_id, p->delay_tick, NULL); } diff --git a/teraterm/teraterm/teraterm.cpp b/teraterm/teraterm/teraterm.cpp index 49c118b0a..902af9ff3 100644 --- a/teraterm/teraterm/teraterm.cpp +++ b/teraterm/teraterm/teraterm.cpp @@ -398,7 +398,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, MSG msg; for (;;) { // idle迥カ諷九〒繝。繝繧サ繝シ繧ク縺後↑縺蝣エ蜷 - DWORD idle_enter_tick = GetTickCount(); + ULONGLONG idle_enter_tick = GetTickCount64(); BOOL sleep_enable = FALSE; for (;;) { // idle蜃ヲ逅繧定。後≧ @@ -412,7 +412,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, if (!continue_idle) { // FALSE縺梧綾縺」縺ヲ縺阪◆繧永dle蜃ヲ逅縺ッ荳崎ヲ if (!sleep_enable) { - if (GetTickCount() - idle_enter_tick > 20) { + if (GetTickCount64() - idle_enter_tick > 20) { // 20ms莉・荳格dle蜃ヲ逅荳崎ヲ√□縺」縺溘iSleep()繧貞・繧後k sleep_enable = TRUE; } @@ -423,7 +423,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, lCount = 0; } else { - idle_enter_tick = GetTickCount(); + idle_enter_tick = GetTickCount64(); sleep_enable = FALSE; } diff --git a/teraterm/teraterm/vtterm.c b/teraterm/teraterm/vtterm.c index bb1a8722e..dd41bd93f 100644 --- a/teraterm/teraterm/vtterm.c +++ b/teraterm/teraterm/vtterm.c @@ -196,8 +196,8 @@ static int FilterTop, FilterBottom, FilterLeft, FilterRight; static BOOL SavedIMEstatus; /* Beep over-used */ -static DWORD BeepStartTime = 0; -static DWORD BeepSuppressTime = 0; +static ULONGLONG BeepStartTime = 0; +static ULONGLONG BeepSuppressTime = 0; static DWORD BeepOverUsedCount = 0; static _locale_t CLocale = NULL; @@ -345,7 +345,7 @@ void ResetTerminal() /*reset variables but don't update screen */ LastPutCharacter = 0; // Beep over-used - BeepStartTime = GetTickCount(); + BeepStartTime = GetTickCount64(); BeepSuppressTime = BeepStartTime - ts.BeepSuppressTime * 1000; BeepStartTime -= (ts.BeepOverUsedTime * 1000); BeepOverUsedCount = ts.BeepOverUsedCount; @@ -5398,8 +5398,8 @@ int VTParse() while ((c>0) && (ChangeEmu==0)) { #if defined(DEBUG_DUMP_INPUTCODE) { - static DWORD prev_tick; - DWORD now = GetTickCount(); + static ULONGLONG prev_tick; + ULONGLONG now = GetTickCount64(); if (prev_tick == 0) prev_tick = now; if (now - prev_tick > 1*1000) { printf("\n"); @@ -5777,9 +5777,9 @@ static void VisualBell(void) static void RingBell(int type) { - DWORD now; + ULONGLONG now; - now = GetTickCount(); + now = GetTickCount64(); if (now - BeepSuppressTime < ts.BeepSuppressTime * 1000) { BeepSuppressTime = now; } diff --git a/teraterm/teraterm/vtwin.cpp b/teraterm/teraterm/vtwin.cpp index 00e7586cf..74722f60d 100644 --- a/teraterm/teraterm/vtwin.cpp +++ b/teraterm/teraterm/vtwin.cpp @@ -2207,7 +2207,7 @@ void CVTWindow::OnKeyDown(WPARAM nChar, UINT nRepCnt, UINT nFlags) #if UNICODE_DEBUG if (UnicodeDebugParam.CodePopupEnable) { - const DWORD now = GetTickCount(); + const ULONGLONG now = GetTickCount64(); switch(CtrlKeyState) { case 0: if (nChar == UnicodeDebugParam.CodePopupKey1) { diff --git a/teraterm/teraterm/vtwin.h b/teraterm/teraterm/vtwin.h index 05a5ee442..70a928df5 100644 --- a/teraterm/teraterm/vtwin.h +++ b/teraterm/teraterm/vtwin.h @@ -72,7 +72,7 @@ class CVTWindow : public TTCFrameWnd #if UNICODE_DEBUG TipWin *TipWinCodeDebug; int CtrlKeyState; // 0:髢句ァ/1:謚シ縺/2:髮「縺/3:謚シ縺(陦ィ遉コ迥カ諷) - DWORD CtrlKeyDownTick; // 譛蛻昴↓謚シ縺励◆tick + ULONGLONG CtrlKeyDownTick; // 譛蛻昴↓謚シ縺励◆tick #endif // TipWin diff --git a/teraterm/ttpfile/bplus.c b/teraterm/ttpfile/bplus.c index f85866fda..c63f1e3ef 100644 --- a/teraterm/ttpfile/bplus.c +++ b/teraterm/ttpfile/bplus.c @@ -80,7 +80,7 @@ typedef struct { int ProgStat; - DWORD StartTime; + ULONGLONG StartTime; DWORD FileMtime; @@ -162,7 +162,7 @@ static BOOL BPInit(TProto *pv, PComVar cv, PTTSet ts) fv->InfoOp->SetDlgProtoText(fv, "B-Plus"); fv->InfoOp->InitDlgProgress(fv, &bv->ProgStat); - bv->StartTime = GetTickCount(); + bv->StartTime = GetTickCount64(); /* file name, file size */ if (bv->BPMode==IdBPSend) @@ -610,7 +610,7 @@ static BOOL FTCreateFile(PBPVar bv) if (bv->ProgStat != -1) { bv->ProgStat = 0; } - bv->StartTime = GetTickCount(); + bv->StartTime = GetTickCount64(); return TRUE; } diff --git a/teraterm/ttpfile/kermit.c b/teraterm/ttpfile/kermit.c index bda13abe4..0b50977e2 100644 --- a/teraterm/ttpfile/kermit.c +++ b/teraterm/ttpfile/kermit.c @@ -79,7 +79,7 @@ typedef struct { int ProgStat; - DWORD StartTime; + ULONGLONG StartTime; DWORD FileMtime; @@ -1086,7 +1086,7 @@ static BOOL KmtSendNextFile(PKmtVar kv) kv->ByteCount = 0; kv->ProgStat = 0; - kv->StartTime = GetTickCount(); + kv->StartTime = GetTickCount64(); fv->InfoOp->SetDlgProtoFileName(fv, kv->FullName); fv->InfoOp->SetDlgByteCount(fv, kv->ByteCount); @@ -1191,7 +1191,7 @@ static BOOL KmtInit(TProto *pv, PComVar cv, PTTSet ts) if (kv->KmtMode == IdKmtSend) { fv->InfoOp->InitDlgProgress(fv, &kv->ProgStat); - kv->StartTime = GetTickCount(); + kv->StartTime = GetTickCount64(); } else { kv->ProgStat = -1; @@ -1347,7 +1347,7 @@ static BOOL FTCreateFile(PKmtVar kv) if (kv->ProgStat != -1) { kv->ProgStat = 0; } - kv->StartTime = GetTickCount(); + kv->StartTime = GetTickCount64(); return TRUE; } diff --git a/teraterm/ttpfile/quickvan.c b/teraterm/ttpfile/quickvan.c index 1b23bc9d4..df3ff364c 100644 --- a/teraterm/ttpfile/quickvan.c +++ b/teraterm/ttpfile/quickvan.c @@ -65,7 +65,7 @@ typedef struct { int ProgStat; - DWORD StartTime; + ULONGLONG StartTime; DWORD FileMtime; @@ -192,7 +192,7 @@ static BOOL QVInit(TProto *pv, PComVar cv, PTTSet ts) fv->InfoOp->SetDlgProtoText(fv, "Quick-VAN"); fv->InfoOp->InitDlgProgress(fv, &qv->ProgStat); - qv->StartTime = GetTickCount(); + qv->StartTime = GetTickCount64(); qv->SeqNum = 0; qv->FileNum = 0; @@ -470,7 +470,7 @@ static BOOL FTCreateFile(PQVVar qv) if (qv->ProgStat != -1) { qv->ProgStat = 0; } - qv->StartTime = GetTickCount(); + qv->StartTime = GetTickCount64(); return TRUE; } @@ -930,7 +930,7 @@ static void QVSendVFILE(PQVVar qv) /* file no. */ qv->FileNum++; qv->ProgStat = 0; - qv->StartTime = GetTickCount(); + qv->StartTime = GetTickCount64(); i = 3; QVPutNum2(qv,qv->FileNum,&i); /* file name */ diff --git a/teraterm/ttpfile/raw.c b/teraterm/ttpfile/raw.c index 4617703c6..e55c05a82 100644 --- a/teraterm/ttpfile/raw.c +++ b/teraterm/ttpfile/raw.c @@ -38,7 +38,7 @@ typedef struct { const char *FullName; // Windows荳翫ョ繝輔ぃ繧、繝ォ蜷 UTF-8 BOOL FileOpen; LONG ByteCount; - DWORD StartTime; + ULONGLONG StartTime; PComVar cv; enum { STATE_FLUSH, // 蜃ヲ逅髢句ァ区凾縺ォ蜿嶺ソ。繝繝シ繧ソ繧呈昏縺ヲ繧 @@ -148,12 +148,12 @@ static BOOL RawReadPacket(void *arg) PComVar cv = rv->cv; BYTE Buff[InBuffSize]; int BuffCount; - static DWORD prev_elapsed; - DWORD elapsed; + static ULONGLONG prev_elapsed; + ULONGLONG elapsed; if (cv->InBuffCount > 0) { if (rv->StartTime == 0) { - rv->StartTime = GetTickCount(); + rv->StartTime = GetTickCount64(); prev_elapsed = rv->StartTime; fv->InfoOp->SetDlgPacketNum(fv, 1); } @@ -166,7 +166,7 @@ static BOOL RawReadPacket(void *arg) LeaveCriticalSection(&cv->InBuff_lock); file->WriteFile(file, Buff, BuffCount); rv->ByteCount += BuffCount; - elapsed = (GetTickCount() - prev_elapsed) / 250; + elapsed = (GetTickCount64() - prev_elapsed) / 250; if (elapsed != prev_elapsed) { prev_elapsed = elapsed; fv->InfoOp->SetDlgByteCount(fv, rv->ByteCount); diff --git a/teraterm/ttpfile/xmodem.c b/teraterm/ttpfile/xmodem.c index 3c9ebddbb..4d9d2d4f5 100644 --- a/teraterm/ttpfile/xmodem.c +++ b/teraterm/ttpfile/xmodem.c @@ -80,7 +80,7 @@ typedef struct { int ProgStat; - DWORD StartTime; + ULONGLONG StartTime; DWORD FileMtime; @@ -299,7 +299,7 @@ static BOOL XInit(TProto *pv, PComVar cv, PTTSet ts) xv->ProgStat = -1; } fv->InfoOp->SetDlgProtoFileName(fv, xv->FullName); - xv->StartTime = GetTickCount(); + xv->StartTime = GetTickCount64(); xv->PktNumOffset = 0; xv->PktNum = 0; diff --git a/teraterm/ttpfile/ymodem.c b/teraterm/ttpfile/ymodem.c index 013c53981..4cd412e8f 100644 --- a/teraterm/ttpfile/ymodem.c +++ b/teraterm/ttpfile/ymodem.c @@ -72,7 +72,7 @@ typedef struct { int ProgStat; - DWORD StartTime; + ULONGLONG StartTime; DWORD FileMtime; @@ -341,7 +341,7 @@ static void initialize_file_info(PYVar yv) } else { yv->ProgStat = -1; } - yv->StartTime = GetTickCount(); + yv->StartTime = GetTickCount64(); fv->InfoOp->SetDlgProtoFileName(fv, yv->FullName); yv->PktNumOffset = 0; @@ -501,7 +501,7 @@ static BOOL FTCreateFile(PYVar yv) if (yv->ProgStat != -1) { yv->ProgStat = 0; } - yv->StartTime = GetTickCount(); + yv->StartTime = GetTickCount64(); return TRUE; } diff --git a/teraterm/ttpfile/zmodem.c b/teraterm/ttpfile/zmodem.c index 28d802a16..fb587b778 100644 --- a/teraterm/ttpfile/zmodem.c +++ b/teraterm/ttpfile/zmodem.c @@ -116,7 +116,7 @@ typedef struct { int ProgStat; - DWORD StartTime; + ULONGLONG StartTime; DWORD FileMtime; @@ -640,7 +640,7 @@ static void ZSendFileDat(PZVar zv) zv->ByteCount = 0; zv->ProgStat = 0; - zv->StartTime = GetTickCount(); + zv->StartTime = GetTickCount64(); fv->InfoOp->SetDlgByteCount(fv, zv->ByteCount); fv->InfoOp->SetDlgPercent(fv, zv->ByteCount, zv->FileSize, &zv->ProgStat); fv->InfoOp->SetDlgTime(fv, zv->StartTime, zv->ByteCount); @@ -746,7 +746,7 @@ static BOOL ZInit(TProto *pv, PComVar cv, PTTSet ts) fv->InfoOp->SetDlgProtoText(fv, "ZMODEM"); fv->InfoOp->InitDlgProgress(fv, &zv->ProgStat); - zv->StartTime = GetTickCount(); + zv->StartTime = GetTickCount64(); zv->FileSize = 0; zv->FileMtime = 0; @@ -1107,7 +1107,7 @@ static BOOL FTCreateFile(PZVar zv) if (zv->ProgStat != -1) { zv->ProgStat = 0; } - zv->StartTime = GetTickCount(); + zv->StartTime = GetTickCount64(); return TRUE; } @@ -1169,7 +1169,7 @@ static BOOL ZParseFile(PZVar zv) if (zv->FileSize > 0) fv->InfoOp->SetDlgPercent(fv, 0, zv->FileSize, &zv->ProgStat); - fv->InfoOp->SetDlgTime(fv, GetTickCount(), zv->ByteCount); + fv->InfoOp->SetDlgTime(fv, GetTickCount64(), zv->ByteCount); /* set timeout for data */ fv->FTSetTimeOut(fv, zv->TimeOut); diff --git a/teraterm/ttpmacro/ttl.cpp b/teraterm/ttpmacro/ttl.cpp index 8c3d6d8fa..a5227d699 100644 --- a/teraterm/ttpmacro/ttl.cpp +++ b/teraterm/ttpmacro/ttl.cpp @@ -81,7 +81,7 @@ static int EndIfFlag; static HWND HMainWin; // Timeout static DWORD TimeLimit; -static DWORD TimeStart; +static ULONGLONG TimeStart; // for 'WaitEvent' command static int WakeupCondition; @@ -1577,7 +1577,7 @@ static WORD TTLFileLock(void) DWORD timeout; int result; BOOL ret; - DWORD dwStart; + ULONGLONG dwStart; Err = 0; GetIntVal(&fhi,&Err); @@ -1592,7 +1592,7 @@ static WORD TTLFileLock(void) timeout = timeoutI * 1000; result = 1; // error - dwStart = GetTickCount(); + dwStart = GetTickCount64(); do { ret = LockFile(FH, 0, 0, (DWORD)-1, (DWORD)-1); if (ret != 0) { // 繝ュ繝繧ッ謌仙粥 @@ -1600,7 +1600,7 @@ static WORD TTLFileLock(void) break; } Sleep(1); - } while (GetTickCount() - dwStart < (timeout*1000)); + } while (GetTickCount64() - dwStart < (timeout*1000)); SetResult(result); return Err; @@ -3446,7 +3446,7 @@ static WORD TTLPause(void) { TTLStatus = IdTTLPause; TimeLimit = (DWORD)(TimeOut*1000); - TimeStart = GetTickCount(); + TimeStart = GetTickCount64(); SetTimer(HMainWin, IdTimeOutTimer, TIMEOUT_TIMER_MS, NULL); } return Err; @@ -3548,7 +3548,7 @@ static WORD TTLRecvLn(void) if (TimeOut>0) { TimeLimit = (DWORD)TimeOut; - TimeStart = GetTickCount(); + TimeStart = GetTickCount64(); SetTimer(HMainWin, IdTimeOutTimer, TIMEOUT_TIMER_MS, NULL); } @@ -4408,7 +4408,8 @@ void TTLShowMINIMIZE(void) static WORD TTLSprintf(int getvar) { TStrVal Fmt; - int Num, NumWidth, NumPrecision; + int Num; + int NumWidth, NumPrecision; TStrVal Str; WORD Err = 0, TmpErr; TVarId VarId; @@ -5460,21 +5461,29 @@ static WORD TTLUnlink(void) static WORD TTLUptime(void) { WORD Err; - TVarId VarId; - DWORD tick; + TVarId VarId, VarId2; + BOOL twoArgs; + ULONGLONG tick; Err = 0; - GetIntVar(&VarId,&Err); - if ((Err==0) && (GetFirstChar()!=0)) - Err = ErrSyntax; - if (Err!=0) return Err; + GetIntVar(&VarId, &Err); + if (Err != 0) return Err; - // Windows OS縺瑚オキ蜍輔@縺ヲ縺九i縺ョ邨碁℃譎る俣シ医Α繝ェ遘抵シ峨r蜿門セ励☆繧九ゅ◆縺縺励49譌・繧堤オ碁℃縺吶k縺ィ縲0縺ォ謌サ繧九 - // GetTickCount64() API(Vista莉・髯)繧剃スソ縺縺ィ縲√が繝シ繝舌シ繝輔Ο繝シ縺励↑縺上↑繧九′縲√◎繧ゅ◎繧5era Term縺ァ縺ッ - // 64bit螟画焚繧偵し繝昴シ繝医@縺ヲ縺縺ェ縺縺ョ縺ァ縲∵э蜻ウ縺後↑縺縲 - tick = GetTickCount(); + twoArgs = CheckParameterGiven(); + if (twoArgs) { + GetIntVar(&VarId2, &Err); + } + if ((Err == 0) && (GetFirstChar() != 0)) + Err = ErrSyntax; + if (Err != 0) return Err; - SetIntVal(VarId, tick); + tick = GetTickCount64(); + if (twoArgs) { + SetIntVal(VarId, (int)(tick / 1000)); + SetIntVal(VarId2, (int)(tick % 1000)); + } else { + SetIntVal(VarId, (int)tick); + } return Err; } @@ -5487,7 +5496,8 @@ static WORD TTLWait(BOOL Ln) WORD Err; TVariableType ValType; TVarId VarId; - int i, Val; + int i; + int Val; int TimeOut; ClearWait(); @@ -5533,7 +5543,7 @@ static WORD TTLWait(BOOL Ln) if (TimeOut>0) { TimeLimit = (DWORD)TimeOut; - TimeStart = GetTickCount(); + TimeStart = GetTickCount64(); SetTimer(HMainWin, IdTimeOutTimer, TIMEOUT_TIMER_MS, NULL); } } @@ -5603,7 +5613,7 @@ static WORD TTLWaitEvent(void) if (TimeOut>0) { TimeLimit = (DWORD)TimeOut; - TimeStart = GetTickCount(); + TimeStart = GetTickCount64(); SetTimer(HMainWin, IdTimeOutTimer, TIMEOUT_TIMER_MS, NULL); } @@ -5645,7 +5655,7 @@ static WORD TTLWaitN(void) if (TimeOut>0) { TimeLimit = (DWORD)TimeOut; - TimeStart = GetTickCount(); + TimeStart = GetTickCount64(); SetTimer(HMainWin, IdTimeOutTimer, TIMEOUT_TIMER_MS, NULL); } @@ -5685,7 +5695,7 @@ static WORD TTLWaitRecv(void) if (TimeOut>0) { TimeLimit = (DWORD)TimeOut; - TimeStart = GetTickCount(); + TimeStart = GetTickCount64(); SetTimer(HMainWin, IdTimeOutTimer, TIMEOUT_TIMER_MS, NULL); } return Err; @@ -6439,8 +6449,9 @@ static int ExecCmnd(void) } if (Err) return Err; if (VarType==ValType) { - switch (ValType) { - case TypInteger: SetIntVal(VarId,Val); break; + switch (VarType) { + case TypInteger: + SetIntVal(VarId,Val); break; case TypString: if (StrConst) SetStrVal(VarId,Str); @@ -6559,17 +6570,8 @@ void SetResult(int ResultCode) BOOL CheckTimeout() { - BOOL ret; - DWORD TimeUp = (TimeStart+TimeLimit); - - if (TimeUp > TimeStart) { - ret = (GetTickCount() > TimeUp); - } - else { // for DWORD overflow (49.7 days) - DWORD TimeTmp = GetTickCount(); - ret = (TimeUp < TimeTmp && TimeTmp >= TimeStart); - } - return ret; + ULONGLONG TimeUp = TimeStart + TimeLimit; + return (GetTickCount64() > TimeUp); } BOOL TestWakeup(int Wakeup) diff --git a/teraterm/ttpmacro/ttmenc.c b/teraterm/ttpmacro/ttmenc.c index ff36bcc43..ff524f339 100644 --- a/teraterm/ttpmacro/ttmenc.c +++ b/teraterm/ttpmacro/ttmenc.c @@ -90,7 +90,7 @@ void Encrypt(const char *InStr, PCHAR OutStr) if (InStr[0]==0) { return; } - srand(LOWORD(GetTickCount())); + srand((unsigned)GetTickCount64()); r = (BYTE)(rand() & 0x3f); r2 = (~r) & 0x3f; OutStr[0] = r; diff --git a/tests/uptime.ttl b/tests/uptime.ttl new file mode 100644 index 000000000..45eea6527 --- /dev/null +++ b/tests/uptime.ttl @@ -0,0 +1,31 @@ +; uptime 繧ウ繝槭Φ繝峨ョ繝繧ケ繝茨シ域磁邯壻ク崎ヲシ +; +; 菴ソ縺譁ケ: Tera Term 繝槭け繝ュ縺ィ縺励※蜊倅ス薙〒螳溯。後☆繧具シ域磁邯壻ク崎ヲシ + +uptime var +uptime secvar msecvar + +day = var / 86400000 +var = var % 86400000 +hour = var / 3600000 +var = var % 3600000 +min = var / 60000 +var = var % 60000 +sec = var / 1000 + +sprintf2 str "System Up Time: %d Days, %d Hours, %d Minutes, %d Seconds" day hour min sec +messagebox str "uptime" + + +day = secvar / 86400 +var = secvar % 86400 +hour = var / 3600 +var = var % 3600 +min = var / 60 +sec = var % 60 + + +sprintf2 str "System Up Time: %d Days, %d Hours, %d Minutes, %d Seconds" day hour min sec +messagebox str "uptime" + +end diff --git a/tests/uptime_test.ttl b/tests/uptime_test.ttl new file mode 100644 index 000000000..20719a12b --- /dev/null +++ b/tests/uptime_test.ttl @@ -0,0 +1,38 @@ +; uptime 繧ウ繝槭Φ繝峨ョ繝繧ケ繝茨シ域磁邯壻ク崎ヲシ +; +; GetTickCount64() 縺ク縺ョ鄂ョ縺肴鋤縺亥セ後「ptime 繧ウ繝槭Φ繝峨′ +; 豁」蟶ク蜍穂ス懊☆繧九%縺ィ繧堤「コ隱阪☆繧九 +; uptime 縺ッ OS 襍キ蜍輔°繧峨ョ邨碁℃譎る俣シ医Α繝ェ遘抵シ峨ョ荳倶ス 32 繝薙ャ繝医r +; int 螟画焚縺ォ譬シ邏阪☆繧九 +; +; 菴ソ縺譁ケ: Tera Term 繝槭け繝ュ縺ィ縺励※蜊倅ス薙〒螳溯。後☆繧具シ域磁邯壻ク崎ヲシ + +uptime tick_start + +; 3 遘帝俣 pause 縺吶k +pause 3 + +uptime tick_end + +; 邨碁℃譎る俣繧定ィ育ョ暦シ医Α繝ェ遘抵シ +; 豕ィ諢: 32bit 縺ョ縺溘a 49.7 譌・縺ァ繧ェ繝シ繝舌シ繝輔Ο繝シ縺吶k縺後 +; 遏ュ譎る俣縺ョ險域クャ縺ァ縺ッ蠖ア髻ソ縺ェ縺 +elapsed = tick_end - tick_start + +; 3000ms ツア500ms 莉・蜀縺ァ縺ゅk縺薙→繧堤「コ隱 +if elapsed < 2500 then + sprintf2 msg 'NG: pause 縺梧掠縺吶℃繧 (%d ms)' elapsed + messagebox msg 'uptime test' + end +endif + +if elapsed > 3500 then + sprintf2 msg 'NG: pause 縺碁≦縺吶℃繧 (%d ms)' elapsed + messagebox msg 'uptime test' + end +endif + +sprintf2 msg 'OK: pause 縺梧ュ」蟶ク縺ォ螳御コ縺励◆ (%d ms)' elapsed +messagebox msg 'uptime test' + +end diff --git a/tests/wait_timeout_connected.ttl b/tests/wait_timeout_connected.ttl new file mode 100644 index 000000000..af0a57ac9 --- /dev/null +++ b/tests/wait_timeout_connected.ttl @@ -0,0 +1,43 @@ +; wait 繧ウ繝槭Φ繝峨ョ繧ソ繧、繝繧「繧ヲ繝医ユ繧ケ繝茨シ域磁邯壼ソ隕シ +; +; GetTickCount64() 縺ク縺ョ鄂ョ縺肴鋤縺亥セ後『ait 繧ウ繝槭Φ繝峨ョ繧ソ繧、繝繧「繧ヲ繝医′ +; 豁」蟶ク蜍穂ス懊☆繧九%縺ィ繧堤「コ隱阪☆繧九 +; OS 襍キ蜍輔°繧 49.7 譌・莉・荳顔オ碁℃縺励◆迺ー蠅縺ァ繧よュ」縺励¥蜍穂ス懊☆繧九%縺ィ繧呈Φ螳壹 +; +; 菴ソ縺譁ケ: SSH/Telnet 遲峨〒繝帙せ繝医↓謗・邯壹@縺溽憾諷九〒螳溯。後☆繧九 + +timeout = 3 + +uptime tick_start + +; 蜃コ迴セ縺励↑縺譁蟄怜励r wait 縺ァ蠕縺。縲3 遘偵〒繧ソ繧、繝繧「繧ヲ繝医&縺帙k +wait 'XXXXXXXXXX_NEVER_APPEAR_XXXXXXXXXX' + +uptime tick_end + +; 繧ソ繧、繝繧「繧ヲ繝医〒謚懊¢縺溘%縺ィ繧堤「コ隱 (result == 1) +if result <> 1 then + messagebox 'NG: wait 縺後ち繧、繝繧「繧ヲ繝医@縺ェ縺九▲縺' 'wait timeout test' + end +endif + +; 邨碁℃譎る俣繧定ィ育ョ暦シ医Α繝ェ遘抵シ +elapsed = tick_end - tick_start + +; 3000ms ツア500ms 莉・蜀縺ァ縺ゅk縺薙→繧堤「コ隱 +if elapsed < 2500 then + sprintf2 msg 'NG: 繧ソ繧、繝繧「繧ヲ繝医′譌ゥ縺吶℃繧 (%d ms)' elapsed + messagebox msg 'wait timeout test' + end +endif + +if elapsed > 3500 then + sprintf2 msg 'NG: 繧ソ繧、繝繧「繧ヲ繝医′驕縺吶℃繧 (%d ms)' elapsed + messagebox msg 'wait timeout test' + end +endif + +sprintf2 msg 'OK: wait 縺梧ュ」蟶ク縺ォ繧ソ繧、繝繧「繧ヲ繝医@縺 (%d ms)' elapsed +messagebox msg 'wait timeout test' + +end diff --git a/ttssh2/ttxssh/ssh.c b/ttssh2/ttxssh/ssh.c index a898e8f38..c8eff7300 100644 --- a/ttssh2/ttxssh/ssh.c +++ b/ttssh2/ttxssh/ssh.c @@ -9039,24 +9039,24 @@ static INT_PTR CALLBACK ssh_scp_dlg_thread_proc(HWND hWnd, UINT msg, WPARAM wp, SendDlgItemMessage(hWnd, IDC_PROGBAR, PBM_SETPOS, (WPARAM)c->scp.ProgStat, 0); } - int elapsed = (GetTickCount() - c->scp.stime) / 1000; + ULONGLONG elapsed = (GetTickCount64() - c->scp.stime) / 1000; if (elapsed > c->scp.prev_elapsed) { if (elapsed > 2) { rate = (int)(transfered / elapsed); if (rate < 1200) { - _snprintf_s(s, sizeof(s), _TRUNCATE, "%d:%02d (%d %s)", elapsed / 60, elapsed % 60, rate, "Bytes/s"); + _snprintf_s(s, sizeof(s), _TRUNCATE, "%llu:%02llu (%d %s)", elapsed / 60, elapsed % 60, rate, "Bytes/s"); } else if (rate < 1200000) { - _snprintf_s(s, sizeof(s), _TRUNCATE, "%d:%02d (%d.%02d %s)", elapsed / 60, elapsed % 60, rate / 1000, rate / 10 % 100, "KBytes/s"); + _snprintf_s(s, sizeof(s), _TRUNCATE, "%llu:%02llu (%d.%02d %s)", elapsed / 60, elapsed % 60, rate / 1000, rate / 10 % 100, "KBytes/s"); } else { - _snprintf_s(s, sizeof(s), _TRUNCATE, "%d:%02d (%d.%02d %s)", elapsed / 60, elapsed % 60, rate / (1000 * 1000), rate / 10000 % 100, "MBytes/s"); + _snprintf_s(s, sizeof(s), _TRUNCATE, "%llu:%02llu (%d.%02d %s)", elapsed / 60, elapsed % 60, rate / (1000 * 1000), rate / 10000 % 100, "MBytes/s"); } } else { - _snprintf_s(s, sizeof(s), _TRUNCATE, "%d:%02d", elapsed / 60, elapsed % 60); + _snprintf_s(s, sizeof(s), _TRUNCATE, "%llu:%02llu", elapsed / 60, elapsed % 60); } SendDlgItemMessage(hWnd, IDC_PROGTIME, WM_SETTEXT, 0, (LPARAM)s); c->scp.prev_elapsed = elapsed; } - c->scp.ProcessedTime = GetTickCount(); + c->scp.ProcessedTime = GetTickCount64(); return FALSE; case WM_COMMAND: @@ -9137,7 +9137,7 @@ static unsigned __stdcall ssh_scp_dlg_thread(void *p) c->scp.prev_elapsed = 0; c->scp.filesndsize = 0; c->scp.canceled = FALSE; - c->scp.stime = GetTickCount(); + c->scp.stime = GetTickCount64(); c->scp.ProcessedTime = c->scp.stime; SetWindowLongPtr(hDlgWnd, GWLP_USERDATA, (LONG_PTR)c); SetTimer(hDlgWnd, c->self_id, SCPDLG_UPDATE_INTERVAL, NULL); @@ -9174,7 +9174,7 @@ static HANDLE start_ssh_scp_dlg_thread(Channel_t *c) // 繧ケ繝ャ繝繝芽オキ蜍募セ縺。 WaitForSingleObject(c->scp.ScpStartThreadEvent, 5000 /*msec*/); ResetEvent(c->scp.ScpStartThreadEvent); - c->scp.stime = GetTickCount(); + c->scp.stime = GetTickCount64(); return thread; } @@ -9241,7 +9241,7 @@ static unsigned __stdcall ssh_scp_thread(void *p) c->scp.filesndsize += ret; #if 1 // 鬮倩イ闕キ蟇セ遲 // 騾イ謐励ム繧、繧「繝ュ繧ー縺ョ謠冗判縺碁俣縺ォ蜷医o縺ェ縺蝣エ蜷医ッ縲∬イ闕キ縺御ク九′繧九∪縺ァ蠕縺、 - while (GetTickCount() - c->scp.ProcessedTime > SCPDLG_UPDATE_INTERVAL * 3) { + while (GetTickCount64() - c->scp.ProcessedTime > SCPDLG_UPDATE_INTERVAL * 3) { Sleep(20); if (pvar == NULL || pvar->socket == INVALID_SOCKET || c->scp.state == SCP_CLOSING || c->used == 0) { goto cancel_abort; @@ -9405,7 +9405,7 @@ static unsigned __stdcall ssh_scp_receive_thread(void *p) } #if 1 // 鬮倩イ闕キ蟇セ遲 // 騾イ謐励ム繧、繧「繝ュ繧ー縺ョ謠冗判縺碁俣縺ォ蜷医o縺ェ縺蝣エ蜷医ッ縲∬イ闕キ縺御ク九′繧九∪縺ァ蠕縺、 - while (GetTickCount() - c->scp.ProcessedTime > SCPDLG_UPDATE_INTERVAL * 3) { + while (GetTickCount64() - c->scp.ProcessedTime > SCPDLG_UPDATE_INTERVAL * 3) { Sleep(20); if (pvar == NULL || pvar->socket == INVALID_SOCKET || c->scp.state == SCP_CLOSING || c->used == 0) { goto cancel_abort; diff --git a/ttssh2/ttxssh/ssh.h b/ttssh2/ttxssh/ssh.h index cb027b041..adfe594b8 100644 --- a/ttssh2/ttxssh/ssh.h +++ b/ttssh2/ttxssh/ssh.h @@ -552,10 +552,10 @@ typedef struct scp { PTInstVar pvar; HANDLE ScpStartThreadEvent; BOOL canceled; - DWORD stime; - int prev_elapsed; + ULONGLONG stime; + ULONGLONG prev_elapsed; int ProgStat; - DWORD ProcessedTime; + ULONGLONG ProcessedTime; // for receiving file long long filetotalsize; long long filercvsize; diff --git a/ttssh2/ttxssh/ttxssh.c b/ttssh2/ttxssh/ttxssh.c index b2f1421ee..867cfa751 100644 --- a/ttssh2/ttxssh/ttxssh.c +++ b/ttssh2/ttxssh/ttxssh.c @@ -604,7 +604,7 @@ static unsigned short find_local_port(PTInstVar pvar) if we're unlucky). They do not need to be (and are not) cryptographically strong. */ - srand((unsigned) GetTickCount()); + srand((unsigned)GetTickCount64()); for (tries = 20; tries > 0; tries--) { memset(&hints, 0, sizeof(hints));