본문 바로가기

개발자의 기록 노트

(153)
[C#] WPF Thread WPF Threading WPF는 새로운 스레드 프로그래밍에 대한 보다 단순화된 모델을 제시한다.대부분의 응용프로그램은 하나의 스레드만으로 실행 되지는 않는다. WPF 역시 렌더링 스레드(Rendering Thread), 사용자 입출력을 담당하는 UI 스레드(UI Thread) 등 여러개의 스레드가 동시에 실행된다. 개발자가 여러 개의 스레드를 다룰수록 복잡하고 디버깅 등의 어려움이 따르게 마련이다. Dispatcher 와 DispatcherObject Dispatcher는 스레드에 포함된 작업큐를 말한다.작업큐에는 수행해야 할 아이템들이 대기하게 되고 정해진 순서에 따라 수행이 된다. 당연히 Dispatcher 스레드 간에는 공유 될 수 없고 하나의 스레드에만 속해야 한다.Dispatcher에는 사용자..
[C#] 닷넷 프레임워크 기반의 소켓 프로그래밍 출처 : http://www.devtimes.com/45 요약 (Summary)이 문서는 닷넷 프레임워크 환경과 이기종 환경 간의 소켓 통신을 위한 간략한 개요를 제시합니다. 특히 HTTP 또는 SOAP 등의 텍스트 기반의 통신이 아닌, C/C++ 개발자들이 선호하는 구조체 패킷을 이용한 통신에 초점을 두었습니다.뿐만 아니라 이를 지원하기 위한 소켓 라이브러리(C# 2.0 지원)도 함께 제공합니다. MIT 라이센스를 채택하였으며, 라이센스에 명시된 바와 같이 상업적인 목적으로도 사용할 수 있습니다.소개 (Introduction)이 문서는 닷넷 프레임워크 기반의 소켓 프로그램을 작성하려는 개발자를 위해 작성되었습니다. 닷넷 개발자는 C/C++ 등으로 작성된 서버/클라이언트와 통신하기 위한 모듈 또는 소프트..
[안드로이드] 동적으로 다음페이지를 로딩하는 ListView 구현 동적으로 다음페이지를 로딩하는 ListView 구현 아이폰의 수많은 UITableView를 활용하는 어플리케이션을 보면 참 퀄리티 높게 잘 만든다는 생각이 드는 것 중에 한가지가 바로, 자동으로 리스트의 가장 아래에 도달하면, 알아서 다음페이지를 로딩하는 기능이 아닐까 싶다. 안드로이드에서도 요즘은 많은 어플리케이션이 해당 기능을 구현하고 있다. 안드로이드에서는 리스트뷰와 데이터간에 Adapter라는 디자인패턴을 활용하고 있어 아이폰의 그것과는 같은 기능이라도 구현하는 방식이 다르다. 안드로이드에서는 좀 더 적극적으로 Adapter를 활용하여 이 기능을 구현해야 한다. 어찌보면 조잡하고 어찌보면 더 쉽게 구현할 수 있다. 길게 이야기할것 없이 예제 코드를 살펴 보겠다. public class Dynami..
[C#] .NET 이 아닌 native 코드로 작성된 외부 DLL 사용 방법(파라미터의 타입을 알 수 없는 경우) 외부 메소드의 파라미터가 char* 인 경우(데브피아 C# 마을, 질문&답변) (원본: http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNO=8&no=120108&ref=120099&page=3#Contents120108) 가장 일반적으로 포인터로 넘겨서 값을 받아올경우 할당되어 있는 방으로 넘겨 받아야 합니다. 하지만 DllImportAttribute 클래스를 이용하여 맵핑 하시기에 어려움을 겪으시는것 같네요. 해당 매개변수는 호출지점에 구도에 따라 string, StringBuilder, byte, unsafe.... 맵핑이 가능합니다. 원초적인 방법으로 IntPtr 을 이용한 메모리 활당하여 이용하는 방법도 가능합니다. 사용하시는 ..
[안드로이드] 안드로이드의 Process & Threads 안드로이드의 Process & Threads 안드로이드의 프로세스(Process)와 스레드(Threads)에 대해서 공부해 보았다.학교에서 배운 운영체제, 시스템 프로그래밍 등의 과목에서 배운 개념과 크게 다른 점은 없지만, 안드로이드의 프로세스와 스레드에는 분명 안드로이드 고유의 특성이 추가적으로 포함되어 있다.다음 링크의 자료를 참조 하였다. http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#ThreadSafe 시작하며 안드로이드 어플리케이션 컴포넌트(components)가 실행하려 할 때, 이미 시작된(running) 다른 컴포넌트가 없다면, 시스템은 단일한 하나의 스레드에서 실행되도록 하는 어플리케이션..
[Java] 비트 연산자 / 시프트 연산자 [Java] 비트 연산자 / 시프트 연산자 자바언어에는 C/C++ 와 동일하게 비트연산자들인 '&', '|', '^', '~' 와 시프트연산자인 '' 가 있습니다.그러나 자바에만 있는 연산자가 있는데요.바로 '>>>' 라는 연산자가 추가적으로 존재합니다. 순서대로 정리해 보도록 하겠습니다. 비트연산자컴퓨터 내부의 데이터를 비트 단위로 비교하거나 조작할 때 사용한다. 1. 논리곱 (and) &각 비트를 비교하여 양쪽 모두 1이면 1, 아니면 0을 반환함. ex) a = 110, b= 220a = 0 1 1 0 1 1 1 0b = 1 1 0 1 1 1 0 0 a&b = 0 1 0 0 1 1 0 0 2. 논리합 (or) |각 비트를 비교하여 어느 한쪽이 1 이면 1, 그렇지 않으면 0을 반환함. ex) a =..
[Java/Tip] 자바에서 unsigned byte 다루기. 자바의 Primitive Data Type 들 중에는 unsigned 데이터 타입이 존재하지 않습니다. unsigned를 특별히 사용할 일이 없을때는 의식하지 못하고 있었는데, 자바에서(정확히는 안드로이드에서 사용할 목적으로) 음성을 G.711 인코딩/디코딩 하기 위한 코덱을 구현 하던 중 깨닫게 되었습니다. byte 타입을 unsigned 로 0~255 을 사용하고 싶었지만, 자바에서는 unsigned 키워드 자체가 존재하지 않아 byte 타입은 -128~127 의 값을 갖게 되어 있더군요. 즉 2's complement 의 값입니다. 하지만 제가 필요한 것은 0~255 의 범위값이었습니다. 정확히는, C#에서 byte 타입으로 보낸 0~255의 값 (이진 값으로는 0000 0000 ~ 1111 111..
동기화 소켓 vs 비동기화 소켓, 사용시 각각의 장단점 // 동기화와 비동기화 소켓 사용시 유의 사항에 가까울지도 동기화 소켓의 경우는 한쪽이 write이면 다른 한쪽은 read로서 다른 일하지말고 read대에만 신경 집중해야 합니다. 그래서 write하는 곳에서 자료를 다 보낼때까지 read하는 쪽은 다 받을때까지 Block(다음 구문으로 넘어가지 않음) 되어 있어야하죠. 클라이언트 측에서는 다 받을때까지 기다리고 난후 다음 일을 하면되겠지만, 서버측에서는 read에만 집중할 수 없고 다른 일을 해야합니다. 즉 다른 요청에 대해서 Listen도 해야하고, 기타 다른 처리도 해야겠지요. 이런 이유로 서버측에서는 Forking(자기 자신을 복제함)을 하든가 Threading을 하던가해서 현재의 일을 하나의 Thread(Forking의 경우는 Process)에게..