stlport

mobile/Android 2010. 7. 26. 16:25

'mobile > Android' 카테고리의 다른 글

WiFi Debugging in Android  (0) 2014.04.14
c에서 logcat에 log찍기  (0) 2010.07.28
c와 연동  (0) 2010.07.23
자바프로젝트에서 export한 jar를 안드로이드프로젝트에서 불러오기  (0) 2010.07.22
블로그 이미지

란마12

,

단축키

tool/eclipse 2010. 7. 23. 08:54


단축키 설정: Window >> Preferences >> Workbench >> Keys
Ctrl + Shift + L : 단축키 보기 (한 번 더 누르면 키 설정메뉴로 들어감)
단축키 저장 파일
%workspace%\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.ui.workbench.prefs

Java Editor 단축키
Ctrl + Shift + M : 특정 클래스 Import 시키기
Ctrl + Shift + O : 자동으로 Import 시키기
Ctrl + Shift + F : 코드 자동 정리, 탬플릿에 지정된 대로 코드 포맷 변경
CTRL + I : 제대로 된 위치의 들여쓰기
Ctrl + Shift + G : 특정 메써드나 필드를 Reference하고 있는 곳을 찾는다.
Ctrl + Shift + T : 클래스 찾기
Ctrl + 1 : Quick Fix. 에러가 발생했을 경우 Quick Fix를 통해 쉽게 해결이 가능하다.
Ctrl + Shift + / : 블럭 주석 설정
Ctrl + Shift + \ : 블럭 주석 해제
CTRL + / : 한줄에 대한 주석 처리
Alt + Shift + UP : 커서를 기준으로 토큰단위 블럭지정
Alt + Shift + DOWN : 커서를 기준으로 토큰단위 블럭해제
CTRL + L : 특정 줄번호로 가기
Alt + Shift + J : 자동으로 주석 달기 (메소드나 멤버변수에 포커스 두고 실행)
Ctrl + O : 모든 클래스, 프로퍼티 트리 보기, 선택가능

Window 이동
F10 : 메뉴창을 활성화
F4 : Open Type Hierarchy(현재 클래스의 상속관계를 보여주는 창이 열린다.)
Ctrl + F8 : 다음 Perspective로 이동
Ctrl + N : 새로운 파일 및 프로젝트 생성.
Ctrl + Shift + Down : Java Editor에서 다음 member로 이동.
Ctrl + F6 : 탭이동
CTRL + SHIFT + E : 열려있는 에디터간 이동
Ctrl + F7 : 다음 View로 이동.
Ctrl + Shift + F7 : 이전 View로 이동.
Alt + <- : 이전 작업 화면
Alt + -> : 다음 작업 화면
F12 : 컴파일 중 에러등으로 포커스가 다른데로 갔을 때 Editor 로 커서 이동
Ctrl + 1 : 컴파일 에러가 발생한 곳에서 Ctrl + 1을 누를 경우 해결책을 제시
선택된 뷰 최대화(Maximize Active View or Editor) : CTRL + M

디버깅 단축키
CTRL + Shift + B : 현 커서의 위치에 브레이크 포인터 설정/해제
F11 : 디버깅 시작
F8 : 디버깅 계속
F6 : 한줄씩 실행(Step Over)
F5 : 한줄씩 실행하되 함수일 경우 그 함수 내부로 들어감(Step Into)
CTRL + R : 현재 라인까지 실행(Run to Line)

Refactoring 단축키
Shift + ALT + 알파벳 : Refactoring을 위한 단축키 임.
ALT + SHIFT + T : 리펙토링 메뉴 바로가기
ALT + SHIFT + R : 변수명, 클래스명 등 이름 변경
ALT + SHIFT + S : 빠른 소스메뉴

RUN 단축키
Ctrl + F11 : 이전에 실행되었던 Run파일 실행.

Text Editing
줄 삭제(Delete Line) : CTRL + D
줄 복사(Duplicate Lines) : CTRL + ALT + UP or DOWN
현재 줄에 새로 추가(Insert Line Above Current Line) : CTRL + SHIFT + ENTER
다음 줄에 새로 추가(Insert Line Below Current Line) : SHIFT + ENTER


 


 

블로그 이미지

란마12

,

c와 연동

mobile/Android 2010. 7. 23. 08:47

+ 관련툴 다운로드
   http://developer.android.com/sdk/ndk/index.html
   http://www.cygwin.com/

+ 설치 주의사항
   - cygwin을 한글명이 포함된 폴더에 설치하면 문제 -> 모두 지우고 영문폴더 밑에 재설치
   - ndk도 한글명 포함된 폴더에 설치하면 문제

+ 안드로이드 프로젝트 생성

+ 사용할 클래스 생성

+ c에서 사용할 헤더 만들기



+ 프로젝트폴더 밑에 jni폴더 생성
+ jni폴더 밑에 Android.mk파일 생성

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloLibrary
LOCAL_SRC_FILES := NdkHello.c
include $(BUILD_SHARED_LIBRARY)

+ jni폴더 밑에 javah로 생성한 헤더파일 복사

+ jni폴더 밑에 c소스파일 생성
#include "android_ndk_test_hello_NdkHello.h"
#include 
jstring Java_android_ndk_test_hello_NdkHello_getMsgFromJni(JNIEnv *env, jobject thiz, jstring jstr)
{
    return (*env)->NewStringUTF(env, "hello from jni");
}

+ cygwin을 이용한 컴파일


+ LogCat에 로그찍기

- Android.mk 파일에 LOCAL_LDLIBS:= -llog

#include <android/log.h>
__android_log_print(ANDROID_LOG_INFO, "ExecSamba", "pid = 0");
__android_log_print(ANDROID_LOG_INFO, "Return2: ", "%d", returnvalue2);

- 한글


+ 참고 사이트
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/guide/jni/index.html
http://pllab.kw.ac.kr/j2seAPIs/guide/jni/spec/types.html#wp9502
http://occamsrazr.net/tt/231
http://micropilot.tistory.com/entry/Hello-Android-NDK-example
http://cafe.naver.com/jcga/1789

'mobile > Android' 카테고리의 다른 글

WiFi Debugging in Android  (0) 2014.04.14
c에서 logcat에 log찍기  (0) 2010.07.28
stlport  (0) 2010.07.26
자바프로젝트에서 export한 jar를 안드로이드프로젝트에서 불러오기  (0) 2010.07.22
블로그 이미지

란마12

,

Decompiler jad

language/JAVA 2010. 7. 22. 16:23

C와 같은 언어는 소스파일을 컴파일하면 해당 시스템에 적합한 바이너리 코드를 생성합니다.
바이너리 코드를 역컴파일 하는 것이 불가능 한것은 아니나, 이것은 지루하고 복잡한 작업입니다.
흔히들 이와같은 작업을 역공학(리버스 엔지니어링)이라 하며, 소프트웨어 보안과 라이센스 정책에 크게 위협이 될수 있는 분야이기도 합니다.

Java의 경우 C와 같은 언어와 달리 바이트 형태의 class파일을 생성하는데 'Write Once, Run Anywhere"라는 Java의 패러다임에서 알수 있듯이, JavaVM이 존재하는 모든 시스템에서 실행될수 있는 시스템 독립적인 코드입니다.
따라서, 바이트 코드와 같은 경우는 바이너리 코드와 달리 손쉽게 역컴파일이 가능합니다.

jad는 바로 Java의 class파일을 디컴파일 해주는 프로그램입니다.
즉, java소스 파일은 없고 class파일만 존재하고 있을때, jad를 이용해 class파일을 java파일로 변환할 수 있습니다.


jad를 Eclipse IDE에 통합하여 편리하게 사용할수 있게 도와주는 plugin이 있습니다.
(Eclipse 3.4에 jadclipse3.3 설치가 가능합니다.)



1. 설치하기

아래 그림과 같이 다운로드 받은 jad파일을 Eclipse디렉토리에 복사합니다.


JadClipse파일(net.sf.jadclipse_3.3.0.jar)을 Eclipse plugins디렉토리에 복사합니다.


Eclipse를 재식하고 Window > Preference > Java > JadClipse에서 아래 그림과 같이 Path to decompiler을 입력합니다.


한글이 깨지는 것은 방지하기 위해 아래 그림과 같이 마지막 항목을 체크합니다.




2. class파일 디컴파일

디컴파일하고자 하는 class파일을 더블클릭하면, 아래 그림과 같이 디컴파일된 java파일이 나타납니다.




3. 난독처리

Java 프로그램은 컴파일된 코드만 배포한다고 하여도(바이트 코드) 이로부터 소스코드를 쉽게 만들어 낼 수 있으므로 소프트웨어 보호라는 측면에서 많은 문제점을 가지고 있습니다. 이와 같은 위험으로부터 소스코드를 보호하기 위해 소스코드를 난독화 할수 있습니다. 난독화는 는프로그램 코드를 변환하는 방법의 일종으로, 프로그램에 사용된 변수명을 아무 의미없는 이름으로 변환하는 등 코드를 지저분하게 하여 사람이 읽기 어렵게 만들어주는 기술입니다.

'language > JAVA' 카테고리의 다른 글

& 0xFF를 사용한 unsigned byte 및 int 비교 방법  (0) 2010.07.21
JAVA Native Method (JNI)  (1) 2009.07.01
JNI (Java Native Interface) 란 ?  (0) 2009.06.30
블로그 이미지

란마12

,

1. 자바프로젝트에서 export jar
   Workspace -> Package Explorer -> Export... -> Java -> JAR file

2. 이클립스프로젝트에서 import jar
   Workspace -> Package Explorer -> Properties -> Java Build Path -> Libraries -> Add External JARs...

'mobile > Android' 카테고리의 다른 글

WiFi Debugging in Android  (0) 2014.04.14
c에서 logcat에 log찍기  (0) 2010.07.28
stlport  (0) 2010.07.26
c와 연동  (0) 2010.07.23
블로그 이미지

란마12

,

11111111 11111111 11111111 10001110 (-114)

00000000 00000000 00000000 11111111 (0xFF)

------------------------------------- 20150831 추가



public class T

{
    public static void main(String[] args) throws Exception

    {
        byte[] b = { (byte)0x34, (byte)0x32, (byte)0x31, (byte)0x8E, (byte)0xF0 };
        System.out.println( "i:\t b[i]\t 0xff&b[i]\t toHex(0xff&b[i])" );
        for( int i=0; i<=4; i++ )

        {

            System.out.println(i + ":\t" + b[i] + "\t" + (0xFF&b[i]) + "\t" + Integer.toHexString(0xFF&b[i]));
        }
    }
}
========================================
C:\>java T
i: b[i] 0xff&b[i] toHex(0xff&b[i])
0: 52 52 34
1: 50 50 32
2: 49 49 31
3: -114 142 8e
4: -16 240 f0
========================================

1. byte & int & bit
1 byte = 8bit : -128 ~ 127, -2^(8-1) ~ 2^(8-1)-1 : 2^8개
1 int = 4 byte = 32bit : -2,147,483,648 ~ 2,147,483,647, -2^(32-1) ~ 2^(32-1)-1 : 2^32개

byte: 00000000
int: 00000000 00000000 00000000 00000000

0x34 = 00000000 00000000 00000000 00110100
(byte)0x34 = 00110100

0x32 = 00000000 00000000 00000000 00110010
(byte)0x32 = 00110010
...
0x8E = 00000000 00000000 00000000 10001110
(byte)0x8E = 10001110 (NOTE: sign bit is 1)

0xF0 = 00000000 00000000 00000000 11110000
(byte)0xF0 = 11110000 (NOTE: sign bit is 1)

2. (byte)0xF0 = 11110000 인데, 가장 좌측의 sign bit가 1이므로, 이는 음수를 뜻합니다.
byte형에 적재된 11110000의 "2의보수"는 00010000 입니다.
  11110000
+ 00010000
------------
  1 00000000  (마치, 10진수 3의 "10의보수"는 7 이듯...)

00010000 는 2^4 = 16 이므로, 결국 (byte)0xF0 = 11110000 는 -16으로 나타나게 됩니다.

3. 0xFF & b[i]
ex) 0xFF & (byte)0xF0

0xFF = 00000000 00000000 00000000 11111111 { = 32-bit = Integer }
                                           & 11110000 { = (byte)0xF0 = -16 }
        ------------------------------------
         00000000 00000000 00000000 11110000 = 0xF0 = 240 { = 32-bit = Integer }


NOTE: byte로 타입 캐스팅을 해서 출력하면 이상한 값이 들어가는 것처럼 보이는 이유는 byte도 int의 경우처럼 맨 앞의 비트를 sign bit 으로 사용하기 때문입니다. 8bit로 표현되는 0xFF 이하의 수치(0~255)에 한해서 (byte)형으로 casting하게 되면 하여 집어넣을 경우 & 0xFF 연산을 해 주게되면 32-bit 크기(int)로 unsigned byte의 값을 얻을 수 있습니다. (참고: 자바에는 primitive type 으로 unsigned 형이 없습니다.)

 

=========================================================================================================

 

자바에서 "int"형은 4byte 로 표현됩니다. 1byte는 8bit 이니 int형은 총 32 bit 로 표현됩니다.

예) int형 1의 bit 표현은 결국 다음과 같습니다.
     00000000 00000000 00000000 00000001

32bit를 이용하여 표현하니 총 표현할 수 있는 수치의 개수는 2의 32승, 즉 4,294,967,296 개가 될 것입니다.

그러나, 가장 좌측 bit 는 음수표식을 위해 사용되니(sign bit), 0을 포함하여 31bit로 표현될 수 있는 수의 개수는 2의 (32-1)승개가 됩니다. 2의 31승은 21,47,483,648 이니, 양수로 가장 큰 수는 21,47,483,648-1 입니다. 이 수는 4byte 형에서 다음과 같이 표현됩니다.
01111111 11111111 11111111 11111111 = 21,47,483,647

음수는 "2의보수"로 표현되는데,  예를 들면 int형(4byte,32bit) -1은 "2의보수"로 표현되어,

11111111 11111111 11111111 111111111 로 저장(?) 됩니다.

이는 마치 10진법 3의 10의 보수는 7, 즉
  3
+ 7
----
 10

이듯이,

  00000000 00000000 00000000 000000001
+ 11111111 11111111 11111111 111111111
--------------------------------------
1 00000000 00000000 00000000 000000000

이므로, 00000000 00000000 00000000 000000001 의 int형 "2의 보수"는
           11111111 11111111 11111111 111111111 인 것이지요.

"2의보수"를 찾는 알고리즘은 통상 NOT연산 후 +1을 취하면 됩니다. 즉,
|-1| 은 1입니다.  1은 이진수로   00000000 00000000 00000000 000000001 입니다. 
   이것에 대해 먼저 NOT연산후   11111111 11111111 11111111 111111110,
                         +1 을 취하면   11111111 11111111 11111111 111111111 입니다.

|-21,47,483,647| 은 01111111 11111111 11111111 11111111 인데,
NOT연산을 취하면  10000000 00000000 00000000 00000000 이고,
+1 을 취하면          10000000 00000000 00000000 00000001 입니다.

|-21,47,483,648| 은 10000000 00000000 00000000 00000000 인데,
NOT연산을 취하면  01111111 11111111 11111111 11111111 이고,
+1 을 취하면          10000000 00000000 00000000 00000000 입니다.

이 처럼 가장 좌측 bit 가 1 인 상태에서 2의 보수로 표현될 수 있는 가장 작은 수는 -21,47,483,648 이 됩니다.

long 형은 8 byte, 64 bit로 표현된다는 것 외엔 동일합니다.
결국, long형의 가장 큰 수는 2의 (64-1)승 -1 인, 9,223,372,036,854,775,807 까지
표현 됩니다. 음수로는 -{2의 (64-1)승} 인 -9,223,372,036,854,775,808 까지 표현되겠지요.

추가로 아래 글들을 참고하세요.

-128>>>1 = 2147483584 ??? 
http://www.javaservice.net/~java/bbs/read.cgi?m=qna&b=javatip&c=r_p&n=998318237

Re: 1>>> 32 가 1인 이유는 ???? 
http://www.javaservice.net/~java/bbs/read.cgi?m=qna&b=QandA&c=r_p&n=994003831

[자바의 숫자표현] 어디까지 가능할까 !!! 
http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=javatip&c=r_p&n=920434490
 

 


[출처] 이원영, 192 Re: 자바의 자료형
http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=javatip&c=r_p&n=1018155018

'language > JAVA' 카테고리의 다른 글

Decompiler jad  (0) 2010.07.22
JAVA Native Method (JNI)  (1) 2009.07.01
JNI (Java Native Interface) 란 ?  (0) 2009.06.30
블로그 이미지

란마12

,

#ifdef _DEBUG
 #define _INC_MALLOC  // exclude standard memory alloc procedures
 #define _CRTDBG_MAP_ALLOC // include Microsoft memory leak detection procedures
 #include "crtdbg.h"
#endif

프로그램 진입점에서 최초에  

#ifdef _DEBUG
 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
#endif


발견된 메모리 누수지점에 브레이크포인트 걸기

Detected memory leaks!
Dumping objects ->
{60} normal block at 0x00324818, 4 bytes long.
Data: <,   > 2C 00 00 00
Object dump complete.

위와같이 누수가 발견되었다면 CrtSetBreakAlloc함수를 다음과 같이 호출

#ifdef _DEBUG
 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
 _CrtSetBreakAlloc(60); //또는 _crtBreakAlloc = 60;
#endif

visual studio를 사용한다면
1. F11로 디버깅을 시작
2. ALT+F9를 눌러서 중단점 창
3. 새로만들기>새데이터중단점에서 주소(0x00324818) 입력
4. 적당한 바이트(위의 경우는 4)를 입력

_CRTDBG_MAP_ALLOC를 선언하면 이렇게 파일명과 라인번호까지 알려준다던데 안되더라..

Detected memory leaks!
Dumping objects ->
D:\VisualC++\CodeGuru\MemoryLeak\MemoryLeak.cpp(67) : {60}
normal block at 0x00324818, 4 bytes long.
Data: <,   > 2C 00 00 00
Object dump complete.

원인이나 해결책 아시는 분은 댓글 부탁드립니다.

문제점: stl사용 시 실제로 누수되지 않았는데도 불구하고 무조건 누수발생 보고됨.

http://msdn.microsoft.com/en-us/library/x98tx3cf
http://msdn.microsoft.com/ko-kr/library/w2fhc9a3.aspx

'library > CRT' 카테고리의 다른 글

errno  (0) 2011.01.08
유니코드를 위한 함수  (0) 2011.01.08
시간과 날짜와 관련된 라이브러리 함수들  (0) 2010.12.15
문자열 함수들의 버퍼 체크 방법 차이  (0) 2010.11.24
코딩시 Unicode 관련 고려사항  (0) 2010.11.23
블로그 이미지

란마12

,

파일날짜 변경 시점

etc 2010. 7. 9. 09:59
만든날짜, CreationTime
액세스한 날짜, LastAccessTime, 사용한 날짜(win98)
수정한 날짜, LastWriteTime, 바뀐 날짜(win98)


복사: 만든 날짜, 액세스한 날짜
수정: 수정한 날짜
cut & paste: 날짜정보 변하지 않음

'etc' 카테고리의 다른 글

ADO 문제(오류번호: 80004003)  (0) 2012.07.10
FTP vs HTTP  (0) 2011.04.14
MSComm32.ocx 라이센스 등록  (0) 2010.06.18
배치파일  (0) 2010.06.18
컴퓨터명으로 IP알아내기  (0) 2010.04.19
블로그 이미지

란마12

,

IOCP

library/WIN32API 2010. 7. 8. 02:25

* 이기탁님이 작성한 문서를 요약함

1. Overlapped IO

 1.1. 넌블러킹, 비동기적으로 IO처리
 1.2. 쓰레드가 Device Driver에게 IO요청 후 신경쓰지 않음
 1.3. Device Driver가 IO감시하면서 완료되면 알려 줌
  1) 이벤트 객체 멤버 이용
  2) 콜백함수
  3) 직접 조회
  4) IOCP
 1.4. IO blocking없음, FIFO로 IO처리하지 않음
 1.5. 소켓생성
      SOCKET sock=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
 1.6. 송신
  int WSASend(SOCKET s,
        LPWSABUF lpBuffers,
              DWORD dwBufferCount,
              LPDWORD lpNumberOfBytesSent,
              DWORD dwFlags,
              LPWSAOVERLAPPED lpOverlapped,
              LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
  1) IO가 끝나기 전에 lpOverlapped가 메모리에서 사라지면 안됨.
  2) lpCompletionRoutine: 1.3.2)의 콜백함수
  3) 리턴값이 SOCKET_ERROR이면서 WSAGetLastError()==ERROR_IO_PENDING인 경우는
     IO진행중이라는 의미

2. IOCP

 2.1. 커널 오브젝트중 하나
 2.2. 재사용 가능한  쓰레드풀 유지
 2.3. CPU에 dispatch되는 쓰레드 조절
 2.4. 생성
  HANDLE CreateIoCompletionPort (
  HANDLE FileHandle,              // handle to file
  HANDLE ExistingCompletionPort,  // handle to I/O completion port
  ULONG_PTR CompletionKey,        // completion key
  DWORD NumberOfConcurrentThreads // number of threads to execute concurrently);
    두가지 일을 한다.
    1) IOCP커널 객체 생성
        hiocp = CreateCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 쓰레드숫자);
    2) Device와 IOCP객체 연결
        CreateCompletionPort(sock, hIocp, 컴플리션 키, 0 );
 2.5. 쓰레드풀 생성
 2.6. 동작에 필요한 자료구조
  2.6.1. Device List
   1) hDevice - dwCompletionKey
   2) hDevice와 관련된 IO가 완료되었을 때 dwCompletionKey를 던짐
   3) 생성: CreateIoCompletionPort가 호출될 때
   4) 제거: hDevice가 close될 때

  2.6.2. IO Completion Queue(IOCQ)
   1) dwBytesTransferred - dwCompletionKey - pOverlapped - dwError
   2) IO의 결과를 저장
   3) worker 쓰레드에서 하나하나 빼서 처리
   4) PostQueuedCompletionStatus함수를 이용해서 직접 넣을 수 있음.
      쓰레드간 큐나 쓰레드 종료 시 활용
   5) 생성: - IO 요청이 완료되었을 때 
            - PostQueuedCompletionStatus를 호출하였을 때
      제거: - Waiting Thread Queue로부터 Entry를 하나 제거할 때
              즉 IOCP Worker Thread를 하나 깨우고 이 쓰레드에서 레코드 하나를
              꺼낼 때

  2.6.3. Waiting Thread Queue(WTQ)
   1) dwThreadid
   2) IOCP Worker 쓰레드 풀
   3) GetQueuedCompletionStatus(GQCS)함수가 호출되면 Worker 쓰레드가 이 큐에
      쌓고 대기.
   4) 2.6.2의 IOCQ에 레코드가 들어오면 IOCP가 이 큐에서 쓰레드 하나를 깨우고
      GQCS함수를 리턴 시킴
      (CreateIoCompletionPort호출시 마지막 인자인 Concurrent Thread 개수만큼만)
   5) 실제로는 LIFO구조인데 Queue라는 이름이 붙었음
      LIFO구조를 이용해서 사용되는 쓰레드수를 최소화 함(CPU scheduling이 최소화됨)
   6) 제거: IOCQ가 비어있지 않고 Release Thread List(RTL)에 있는 쓰레드 수가
            Concurrent Thread수를 넘지 않을 때, IOCQ에서 레코드 entry가 하나
            제거되고, WTQ에 있던 dwThreadid가 RTL로 옮겨감.

  2.6.4. Released Thread List(RTL)
   1) 쓰레드 풀에서 꺼내온 쓰레드들
   2) 생성: - IOCP가 WTQ에서 쓰레드를 깨울 때
            - Paused Thread가 깨어날 때
   3) 제거: - 쓰레드가 다시 GetQueuedCompletionStatus 함수를 부를 때
            - 쓰레드가 스스로 Suspend(Sleep, WaitForSinglObject등으로 블록) 될 때

  2.6.5 Paused Thread List(PTL)
   1) 어떤 이유로 Suspend된 쓰레드들의 모임
   2) 생성: Released Thread 즉 돌고 있는 쓰레드가 스스로 멈출 때
      제거: Suspend된 쓰레드가 깨어날 때(dwThreadid는 RTL로 옮겨감)

  2.6.6. Concurrent Thread 수와 PTL, RTL
   1) Concurrent Thread 수: RTL에 들어갈 쓰레드 수
   2) Suspend된 쓰레드가 있다면 PTL에에 옮겨 놓고 WTQ에 대기중인 쓰레드를
      RTL로 가져와 처리.
   3) Suspend된 쓰레드가 깨어나면 RTL에 쓰레드가 Concurrent Thread 수보다
      초과될 수도 있다. 적어질 때까지 IOCP는 WTQ에서 쓰레드를 가져오지
      않는다. (효율적인 Thread Context Switching)

블로그 이미지

란마12

,


Visual Studio로 멀티 쓰레드를 디버깅하다 보면 반응을 거의 안하는 것 처럼 현저히 느려질 때가 있습니다.
이런 문제를 해결하는 방안입니다.

결론부터 말씀드리자면, 고급 텍스트 서비스를 '사용안함'으로 설정하면 됩니다.
위치는 국가 및 언어 옵션 -> 언어 탭에서 텍스트 서비스 및 입력 언어 자세히 -> 고급 탭 에 있습니다.

문제에 대한 자세한 원인은 이 곳에서 확인하실 수 있습니다.

원문: http://dev.heartsavior.net/110

블로그 이미지

란마12

,