... | ... | @@ -147,19 +147,44 @@ DateTime은 struct로정의된 value type이다. |
|
|
* **문제) Unix Time을 DateTime으로 바꾸기 / DateTime을 UnixTime으로 바꾸기**
|
|
|
|
|
|
``` cs
|
|
|
static void Main(string[] args)
|
|
|
{
|
|
|
DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
|
|
static void Main(string[] args)
|
|
|
{
|
|
|
DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
|
|
|
|
|
//DateTime을 UnixTime으로 바꾸기
|
|
|
long unixMillis = (DateTime.UtcNow.Ticks - unixStartTime.Ticks) / 10000;
|
|
|
//DateTime을 UnixTime으로 바꾸기
|
|
|
long unixMillis = (DateTime.UtcNow.Ticks - unixStartTime.Ticks) / 10000;
|
|
|
|
|
|
//Unix Time을 DateTime으로 바꾸기
|
|
|
long dateMillis = unixMillis + (unixStartTime.Ticks / 10000);
|
|
|
DateTime dateTime = new DateTime(dateMillis * 10000, DateTimeKind.Utc);
|
|
|
Console.WriteLine(dateTime.ToLocalTime());
|
|
|
}
|
|
|
//Unix Time을 DateTime으로 바꾸기
|
|
|
long dateMillis = unixMillis + (unixStartTime.Ticks / 10000);
|
|
|
DateTime dateTime = new DateTime(dateMillis * 10000, DateTimeKind.Utc);
|
|
|
Console.WriteLine(dateTime.ToLocalTime());
|
|
|
}
|
|
|
```
|
|
|
|
|
|
* **검증**
|
|
|
``` c
|
|
|
#include <stdio.h>
|
|
|
#include <time.h>
|
|
|
|
|
|
int main(int argc, char* argv[])
|
|
|
{
|
|
|
time_t current_time;
|
|
|
time(¤t_time);
|
|
|
|
|
|
printf("%ld\n", current_time);
|
|
|
printf(ctime(¤t_time));
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
```
|
|
|
linux 환경에서 위와 같은 main.c를 작성하고 실행시키면 다음과 같은 결괏값이 나온다.
|
|
|

|
|
|
|
|
|
구해지는 시간(1448967159)은 1970년 1월 1일 0시부터 함수를 호출할 때 까지의 초단위이므로 milisecond값인 1448967159000값을 입력값으로 코드를 실행하면 (`long unixMillis = 1448967159000;`)
|
|
|
 이다.
|
|
|
|
|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
#### **● System.TimeSpan**
|
... | ... | @@ -211,8 +236,10 @@ Console.WriteLine(Encoding.Unicode.GetString(buf)); |
|
|
|--------|--------|
|
|
|
| ASCII | 7bit ASCII 문자셋을 위한 인코딩 |
|
|
|
| Dafault | 시스템 기본 문자셋을 위한 인코딩<br>한글 윈도우의 경우 ks_c_5601-1987, 영문 윈도우의 경우 iso_8859-1 |
|
|
|
| Unicode | 7bit ASCII 문자셋을 위한 인코딩 |
|
|
|
| ASCII | 7bit ASCII 문자셋을 위한 인코딩 |
|
|
|
| Unicode | 유니코드 문자셋의 UTF-16 인코딩 |
|
|
|
| UTF32 | 유니코드 문자셋의 UTF-32 인코딩 |
|
|
|
| UTF8 | 유니코드 문자셋의 UTF-8 인코딩 |
|
|
|
|
|
|
_ _ _
|
|
|
### **6. BitConverter 정리**
|
|
|
문자열은 인코딩 방식에 따라 같은 문자열이라도 바이트 배열로의 변환이 달라질 수 있다.하지만 그 밖의 기본 타입(byte, short, int 등)은 변환 방법이 고정돼 있다.
|
... | ... | @@ -241,7 +268,7 @@ _ _ _ |
|
|
|
|
|
ThreadStart는 parameter를 직접 전달 받지 않는다. ParameterizedThreadStart는 하나의 parameter를 전달하고 리턴값이 없는 형식이다. Parameter의 전달은 Thread.Start() method를 호출할 때 Parameter를 전달한다.
|
|
|
<br>
|
|
|
**2. System.Threading.Monitor**
|
|
|
**3. System.Threading.Monitor**
|
|
|
``` cs
|
|
|
List<Task> tasks = new List<Task>();
|
|
|
Random rnd = new Random();
|
... | ... | @@ -292,7 +319,7 @@ lock (rnd) |
|
|
}
|
|
|
```
|
|
|
<br>
|
|
|
**3. thread의 동작방식**
|
|
|
**4. thread의 동작방식**
|
|
|
* **상시실행**
|
|
|
thread가 생성되면 오랜 시간동안 생성돼 있는 유형.
|
|
|
|
... | ... | @@ -301,10 +328,10 @@ thread가 생성되면 오랜 시간동안 생성돼 있는 유형. |
|
|
|
|
|
2번 유형 때문에 매번 thread를 생성하는 것은 불편하다. 임시적인 목적으로 언제든 원하는 때에 thread를 사용할 수 있다면 좋을 것이다.
|
|
|
<br>
|
|
|
**4. CLR thread pool**
|
|
|
**5. CLR thread pool**
|
|
|
**System.Threading.ThreadPool :** thread pool은 background task를 수행하는 thread의 집합이다. 필요할 때마다 thread를 꺼내 쓰고 필요없어지면 다시 pool에 thread가 반환된다.
|
|
|
<br>
|
|
|
**5. System.Threading.EventWaitHandel**
|
|
|
**6. System.Threading.EventWaitHandel**
|
|
|
thread로 하여금 이벤트를 기다리게 만들 수 있고, 다른 thread에서 원하는 이벤트를 발생시키는 시나리오에 적합하다. EventWaitHandel 객체를 응용하면 ThreadPool의 단점을 보완할 수 있다. EventWaitHandle.Set method를호출해 Signal 상태로 전환된 이벤트가 Non-Signal 상태로 자동으로 전환되느냐에 따라 ManualResetEvent, AutoResetEvent로 나뉜다. ManualResetEvent는 여러 개의 thread가 동시에 여러 개의 작업을 처리할 때 유용하다.
|
|
|
|
|
|
``` cs
|
... | ... | @@ -377,8 +404,8 @@ data binding을 할 때, ListBox, ListView 또는 TreeView 등의 ItemsControl |
|
|
WPF에서는 INotifyCollectionChanged interface를 구현하는 data collection에 대한 기본 제공 구현인 ObservableCollection 클래스를 제공한다. ObservableCollection은 `IList<T>`를 상속받았고 INotifyCollectionChanged interface를 구현하고 있다.
|
|
|
|
|
|
* * *
|
|
|
* * *
|
|
|
##### **#1 garbage collector 동작 방식**
|
|
|
### ==Note & Tips==
|
|
|
##### **#A garbage collector 동작 방식**
|
|
|
|
|
|
``` cs
|
|
|
static void Main(string[] args)
|
... | ... | @@ -423,7 +450,7 @@ private static void DoMethod() |
|
|
<img src="FourthImage/7.png" width="400">
|
|
|
|
|
|
* * *
|
|
|
##### **#2 using keyword**
|
|
|
##### **#B using keyword**
|
|
|
FileLogger class에 IDisposable interface가 구현돼 있다면 FileLogger instance를 Dispose하기전에 exception이 발생할 수 있으므로 다음과 같이 구현한다.
|
|
|
|
|
|
``` cs
|
... | ... | @@ -457,8 +484,7 @@ using (FileLogger log = new FileLogger("sample.log")) |
|
|
}
|
|
|
```
|
|
|
* * *
|
|
|
|
|
|
##### **#3. String 대표 method example**
|
|
|
##### **#C String 대표 method example **
|
|
|
``` cs
|
|
|
// String.Format
|
|
|
string strFormat = String.Format("At {0}, the temperature is {1}°C.", DateTime.Now, 20.4);
|
... | ... | |