728x90
728x170
▶ TimeSleepManager.cs
using System;
using System.Threading;
namespace TestProject
{
/// <summary>
/// 시간 휴지 관리자
/// </summary>
public static class TimeSleepManager
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 마지막 틱 카운트
/// </summary>
public static long LastTickCount;
#endregion
//////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 전체 시간 1
/// </summary>
private static int _totalTime1 = 0;
/// <summary>
/// 카운트 1
/// </summary>
private static int _count1;
/// <summary>
/// 전체 시간 2
/// </summary>
private static int _totalTime2 = 0;
/// <summary>
/// 카운트 2
/// </summary>
private static int _count2;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 시작하기 - Start()
/// <summary>
/// 시작하기
/// </summary>
public static void Start()
{
LastTickCount = DateTime.Now.Ticks;
}
#endregion
#region 휴지하기 - Sleep()
/// <summary>
/// 휴지하기
/// </summary>
public static void Sleep()
{
long currentTickCount = DateTime.Now.Ticks;
int deltaTime = (int)((currentTickCount - LastTickCount) / 10000d);
Console.WriteLine($"작업 시간 : {deltaTime}");
LastTickCount = currentTickCount;
_count1++;
_totalTime1 += deltaTime;
int sleep1;
if(_count1 == 5) // 5번
{
if(_totalTime1 >= 1000) // 1초
{
sleep1 = 0;
}
else
{
sleep1 = 1000 - _totalTime1;
}
_count1 = 0;
_totalTime1 = 0;
}
else
{
sleep1 = 0;
}
_count2++;
_totalTime2 += deltaTime;
int sleep2;
if(_count2 == 1000) // 1,000번
{
if(_totalTime2 >= 3600000) // 60분
{
sleep2 = 0;
}
else
{
sleep2 = 3600000 - _totalTime2;
}
_count2 = 0;
_totalTime2 = 0;
}
else
{
sleep2 = 0;
}
int finalSleep = sleep1 > sleep2 ? sleep1 : sleep2;
Console.WriteLine($"휴지 시간 : {finalSleep}");
if(finalSleep > 0)
{
Thread.Sleep(finalSleep);
LastTickCount = DateTime.Now.Ticks;
}
}
#endregion
}
}
728x90
▶ Program.cs
using System;
using System.Threading;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
Random random = new Random(DateTime.Now.Millisecond);
TimeSleepManager.Start();
for(int i = 0; i < 100; i++)
{
Thread.Sleep(random.Next(100, 300)); // 작업을 가정한다.
TimeSleepManager.Sleep();
}
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] KRX 주식 시세 데이터 구하기 (0) | 2022.03.31 |
---|---|
[C#/COMMON] DateTime 구조체 : FromOADate 정적 메소드를 사용해 배정도 실수 값에서 날짜/시간 구하기 (0) | 2022.03.30 |
[C#/COMMON] DateTime 구조체 : ToOADate 메소드를 사용해 배정도 실수 값 구하기 (0) | 2022.03.30 |
[C#/COMMON] WEBP 파일로 변환하기 (0) | 2022.01.29 |
[C#/COMMON] 몫/나머지 구하기 (0) | 2022.01.25 |
[C#/COMMON] TypeConverter 클래스 사용하기 (0) | 2022.01.18 |
[C#/COMMON] 조건부 컴파일 사용하기 (닷넷 프레임워크 버전) (0) | 2022.01.16 |
[C#/COMMON] 조건부 컴파일 사용하기 (0) | 2022.01.16 |
[C#/COMMON] 누겟 패키지 조건부 참조 사용하기 (0) | 2022.01.16 |
[C#/COMMON] 조건부 참조 사용하기 (0) | 2022.01.16 |