DWORD ic;
nDone++;
ic = (DWORD)(pOv->hEvent);
CurPosIn.LowPart = OverLapIn[ic].Offset;
CurPosIn.HighPart = OverLapIn[ic].OffsetHigh;
if (CurPosIn.QuadPart < FileSize.QuadPart) {
ReadFileEx(hInputFile, AsRec[ic], REC_SIZE, &OverLapIn[ic], ReadDone);
}
return;
}
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΡΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠΉΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Ρ ΠΎΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΠ‘ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. Π ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°Π½Π½ΠΈΡ ΠΠ‘ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΡΠΎΡΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ .
ΠΠ΄Π½Π°ΠΊΠΎ Windows ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° Π·Π° ΡΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ , Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ . Π Π°Π½Π΅Π΅ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ grepMT (Π³Π»Π°Π²Π° 7). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ 14.1 ΠΈ 14.2, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π°, ΠΈ ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ Π±Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΡΠ²Π΅ΡΡΡΡ Π·Π°ΠΏΠΈΡΡ.
Π’Π°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ atouMT, ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΠΊΠ½ΠΈΠ³Π΅ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ, Π½ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ Π½Π° Web-ΡΠ°ΠΉΡΠ΅. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° atouMT Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±Π½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Windows, Π½ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠ° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π»ΡΠ±ΡΠΌ ΠΈΠ· Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠ»ΠΎΠΆΠ΅Π½. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π±ΡΡΠ΅ΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΡΠ΅ΠΊΠ΅ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΡΠ΅Π½ΠΈΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ atouMT.Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° Web-ΡΠ°ΠΉΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ "Π»ΠΎΠ²ΡΡΠ΅ΠΊ", ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄ΠΆΠΈΠ΄Π°ΡΡ Π²Π°Ρ ΠΏΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ°ΠΉΠ»Ρ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CreateHandle, Π° Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ DuplicateHandle.
ΠΠΈΡΠ½ΠΎ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π° Π½Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. ΠΠΎΡΠΎΠΊΠΈ Π»Π΅Π³ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ , ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠ°Π½Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅, ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΈ Π² ΡΠ΅Π»ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π°. ΠΡΠΎΡΠΎΠ΅, Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΡΠΎΠ² Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΠΎ ΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π³Π»Π°Π²Ρ.
Π’Π°ΠΉΠΌΠ΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ
Windows NT ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (waitable timers), ΡΠ²Π»ΡΡΡΠΈΡ ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΈΠΏΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ΄ΡΠ°, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅.
ΠΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠ³Π½Π°Π» ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΎΠ·Π΄Π°Π² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Sleep. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ serverNP (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 11.3) ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π»Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΡΠΎΠΊΠΎΠ²Π΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΡΠ»ΠΊΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠ°Π½Π°Π»Π°. ΠΠΎΡΡΠΎΠΌΡ ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Ρ ΠΎΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠΉ, Π½ΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ Π½Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΉΠΌΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΈΠ³Π½Π°Π» Π±ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ Π² ΡΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π’Π°ΠΉΠΌΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΠΌ (synchronization timer), Π»ΠΈΠ±ΠΎ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠΌ Π²ΡΡΡΠ½ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡΠΈΠΌ (manual-reset notification timer) ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠΌ. Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠΌΡ Π²ΡΡΡΠ½ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡΠ΅ΠΌΡ ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ CreateWaitableTimer.
HANDLE CreateWaitableTimer(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCTSTR lpTimerName);
ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, bManualReset, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠ°ΠΉΠΌΠ΅Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ β ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡΠΈΠΉ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 14.3 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ, Π½ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π²Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ OpenWaitableTimer, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ ΡΡΠ΅ΡΡΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ.
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ SetWaitableTimer Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠΌΠΈ ΡΠΈΠ³Π½Π°Π»Π°ΠΌΠΈ.
BOOL SetWaitableTimer(HANDLE hTimer, const LARGE_INTEGER *pDueTime, LONG IPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, BOOL fResume);
hTimer β Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ CreateWaitableTimer.
ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ pDueTime, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π»ΠΈΠ±ΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ°ΡΡΡΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ 100 Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄, Π° ΠΈΡ ΡΠΎΡΠΌΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΡΡΡΠΊΡΡΡΠΎΠΉ FILETIME. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° FILETIME Π±ΡΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ Π² Π³Π»Π°Π²Π΅ 3 ΠΈ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π½Π°ΠΌΠΈ Π² Π³Π»Π°Π²Π΅ 6 Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ timep (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 6.2).
ΠΠ΅Π»ΠΈΡΠΈΠ½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠ³Π½Π°Π»Π°ΠΌΠΈ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ Π² ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅, Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ . ΠΡΠ»ΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ°Π²Π½ΡΠΌ 0, ΡΠΎ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΡΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π΅Π³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ CancelWaitableTimer. ΠΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ.
Π§Π΅ΡΠ²Π΅ΡΡΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, pfnCompletionRoutine, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π΅ΠΆΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ ΠΏΡΡΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, plArgToComplretionRoutine.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΏΠΎΡΠΎΠΊ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π΅ΠΆΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ SleepEx, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. Π ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ SetWaitableTimer. ΠΠΎΠ»Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 14.3, Π½Π°Ρ ΠΎΠ΄ΡΡΠ°ΡΡΡ Π½Π° Web-ΡΠ°ΠΉΡΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ Π΄Π°Π΅Ρ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, fResume, ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΡΠ½Π΅ΡΠ³ΠΎΡΠ±Π΅ΡΠ΅ΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ CancelWaitableTimer ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠΌΠ΅Π½Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΠ·Π²Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ SetWaitableTimer, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ°. Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ°Π· Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ SetWaitableTimer.
ΠΡΠΈΠΌΠ΅Ρ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 14.3 Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ².
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 14.3. TimeBeep: Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²/* ΠΠ»Π°Π²Π° 14. TimeBeep.Ρ. ΠΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π²ΡΠΊΠΎΠ²ΠΎΠ΅ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅. */
/* ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅: TimeBeep ΠΏΠ΅ΡΠΈΠΎΠ΄ (Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ ). */
#include "EvryThng.h"
static BOOL WINAPI Handler(DWORD CntrlEvent);
static VOID APIENTRY Beeper(LPVOID, DWORD, DWORD);
volatile static BOOL Exit = FALSE;
HANDLE hTimer;
int _tmain(int argc, LPTSTR argv[]) {
DWORD Count = 0, Period;
LARGE_INTEGER DueTime;
/* ΠΠ΅ΡΠ΅Ρ Π²Π°Ρ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡ <Ctrl-c> Π΄Π»Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π‘ΠΌ. Π³Π»Π°Π²Ρ 4. */
SetConsoleCtrlHandler(Handler, TRUE);
Period = _ttoi(argv[1]) * 1000;
DueTime.QuadPart = β(LONGLONG)Period * 10000;
/* ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ DueTime ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»Π΅Π½ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ΅ΡΠΈΠΎΠ΄ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΡΡΡ Π² ΠΌΡ (10-3 Ρ), a DueTime β Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΠΏΠΎ 100 Π½c (10-7 Ρ) Π΄Π»Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΠΈΠΏΠΎΠΌ FILETIME. */