본문 바로가기
728x90

Programing_Language25

[쓰레드 동기화] Monitor 와 lock (IPC) (lock > Monitor 편의성) https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.monitor?view=netcore-3.1 Monitor Class (System.Threading) 개체에 대한 액세스를 동기화하는 메커니즘을 제공합니다.Provides a mechanism that synchronizes access to objects. docs.microsoft.com Monitor Interlock과 같이 공유 자원 선점의 동기화를 위해 사용된다. Interlock의 경우 특정 쓰레드 동기화가 필요한 코드 블럭 { 임 계 구 역 } 을 동기화 할때 쓰기보다는 특정 변수의 Increment 와 Decrement를 할 때 많이 쓰인다. 코드 블럭단위의 임계구역의 진입을 제어.. 2020. 7. 18.
[쓰레드 동기화] Interlocked (공유자원과 임계구역) https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.interlocked?view=netcore-3.1 Interlocked Class (System.Threading) 다중 스레드에서 공유하는 변수에 대한 원자 단위 연산을 제공합니다.Provides atomic operations for variables that are shared by multiple threads. docs.microsoft.com Remarks 이 클래스의 메서드는 스레드는 다른 스레드에서 액세스할 수 있는 변수를 업데이트 하는 동안 스케줄러 컨텍스트를 전환 하는 경우 또는 별도 프로세스에서 두 스레드가 동시에 실행 중일 때 발생할 수 있는 오류 로부터 보호할 수 있습니다.. 2020. 7. 18.
[쓰레드] TaskCreateOptions.LongRunning 테스크를 만들때 옵션에 LongRunning을 해줄 수 있는데 이것은 긴 작업이 소요될 가능성이 있는 테스크를 지정하여 쓰레드풀에서 따로 관리되게 만들어줌. 아래처럼 쓰레드 풀이 제한이 3개 이지만 실제 쓰레드 함수가 실행되는 것을 볼 수 있음. LongRunning 옵션을 취하여 Thread를 선언하여 사용할때 보다 Task를 사용하여 관리 유연성이 좋아졌다는 것을 알 수 있다. 2020. 7. 17.
[쓰레드] 쓰레드풀(ThreadPool) 쓰레드 풀 (ThreadPool) - 쓰레드 임시 대기소같은 개념이다. 관리 되어야하는 작업들이 끝나면 해당 쓰레드를 삭제하지 않고 쓰레드풀에서 임시 대기 시켰다가 다시 필요하면 사용할 수 있다. public static bool QueueUserWorkItem(WaitCallback callBack); - > WaitCallback callBack 함수를 메서드 큐에 대기시킨다. 위에선 ThreadFunc 함수를 대기 시킴, 대기 큐에 성공적으로 들어가지면 true 작업항목을 큐에 대기시키지 못하면 System.NotSupportedException이 발생. 델리게이트로 ThreadFunc의 함수포인터를 전달 시키는데 매개변수 타입이 없으면 에러가나서 사용할 매개변수가 없으면 형태만 맞춰주자. 위에서 .. 2020. 7. 17.
[쓰레드] IsBackground , join Thread IsBackground; public bool IsBackground { get; set; } 스레드가 배경 스레드인지를 나타내는 값을 가져오거나 설정합니다. 반환 값: 이 스레드가 백그라운드 스레드이거나 백그라운드 스레드가 될 예정이면 true이고, 그렇지 않으면 false입니다. 예외: T:System.Threading.ThreadStateException: 스레드가 중지되었습니다. 해당 쓰레드를 백그라운드로 돌릴것이냐 포그라운드로 돌릴것이냐 설정 할 수 있다. 디폴트(default)는 false 값을 가지고있다. true 설정을 하면 백그라운드 쓰레드로 설정하겠다는 뜻이고. 메인 쓰레드가 종료되면 백그라운드 쓰레드가 작업하던 I'm Thread 출력을 상관없이 종료 시킨다. 반대로 fa.. 2020. 7. 17.
VisualStudio 내부 스택 크기 조절방법 프로젝트 속성 - 구성 속성 - 링커 - 시스템 스택 예약 크기 및 조절. 2019. 4. 6.
[MFC] 문자열 변환 매크로 및 사용 주의사항 CString 을 char*나 char*를 CString으로 변환시 W2A A2W 혹은 _T(" ") 매크로를 사용하여 변환하는경우 스택오버플로우가 발생하는 문제점을 직면했다. 반복문내에서 여러번 변환과정할때 내부 스택을 사용하기 때문에, 반복적으로 사용하면 스택오버플로우가 발생함. ATL7.0부터 도입된 CW2A와 CA2W는 위의 문제를 피할 수 있다. 단, 내부 버퍼의 일정 크기를 넘어서면 힙에 메모리를 할당하게 된다. 따라서, 스택 오버플로우로 인한 프로그램이 죽는현상을 방지할 수 있다. ex) char* -> CString 으로 변환 ex) CString -> char*로 변환 ex 0611_추가) UTF_8 문자열 집합 인코딩 변환 하는법 참조 : https://docs.microsoft.com.. 2019. 4. 6.
[MFC] CFileDialog 클래스 1 2 3 4 5 6 7 8 9 explicit CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL, DWORD dwSize = 0, BOOL bVistaStyle = TRUE); 1. 매개 변수 - bOpenFileDialog : TRUE(파일 열기 대화상자) , FALSE : 다른 이름으로 저장 대화상자. - lpszDefExt : 기본 파일 이름 확장명 - lpszFileName : 파일 이름 상자에 .. 2019. 4. 6.
[MFC] csv파일 경로를 ListControl에 채우기 1. MFC 기본 컨트롤러 배치 (Button, ListControl) MFCL 기본컨트롤 ListControl과 Button(버튼)을 추가해줍니다. 2. 두 컨트롤에 대해 변수 추가 해당 컨트롤을 우클릭하여 변수를 추가해줍니다. 리스트 컨트롤의 변수이름은 ListController로 해줍니다. 이름은 편하게 지으시면 됩니다. 사진은 없지만 버튼도 똑같이 해주면됩니다. 3. ListControll의 속성을 변경해줍니다. 여기까지 했으면 아래와 같이 보입니다. 버튼 캡션이름은 ReadFile로 했습니다. 안바꾸셔도 됩니다. 코드 작성이전에 해당 변수들이 잘 만들어졌는지 확인합니다. 클래스명 변수이름; ex) CButton(클래스명) ReadFile(변수이름); 4. OnInitDialog()로가셔서 Lis.. 2019. 4. 6.
함수 포인터(Function Pointer) 와 보이드 포인터(Void*) □ 함수 포인터 - 실행 코드인 함수의 주소를 다루는 포인터 - 함수의 이름은 함수가 있는 메모리의 시작주소가 된다. 함수명이 함수의 메모리의 주소이므로, 함수 포인터에 저장하면 함수를 다양한 방식으로 호출 할 수 있다. 함수 형태는 매개변수의 개수와 자료형, 그리고 반환값의 자료형으로 정의 한다. □ 함수 포인터 배열 - 함수 포인터를 배열에 저장하여 사용할 수 있다. □ 예제로 함수 포인터 살펴보기 함수 포인터를 선언할때 매개변수의 타입 또는 갯수를 설정해주지 않은 경우에는 가리키는 함수의 매개변수 형태와 상관없이 (반환값은 일치해야함) 정상적으로 실행되는 모습을 볼 수 있다. 하지만, 함수 포인터의 매개변수 형태(갯수)를 지정해놓은 경우, 갯수가 맞지 않아 컴파일시 다음과 같은 오류를 보게된다. 에.. 2016. 11. 2.
728x90