RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'분류 전체보기'에 해당되는 글 379
HTML/FLEX  2008/08/15 20:29

http://www.communitymx.com/content/article.cfm?cid=E5141&print=true


  • Window: Use the Window value to play a Flash Player movie in its own rectangular window on a web page. This is the default value for wmode and it works the way the classic Flash Player works. This normally provides the fastest animation performance.
  • Opaque: By using the Opaque value you can use JavaScript to move or resize movies that don't need a transparent background. Opaque mode makes the movie hide everything behind it on the page. Additionally, opaque mode moves elements behind Flash movies (for example, with dynamic HTML) to prevent them from showing through.
  • Transparent: Transparent mode allows the background of the HTML page, or the DHTML layer underneath the Flash movie or layer, to show through all the transparent portions of the movie. This allows you to overlap the movie with other elements of the HTML page. Animation performance might be slower when you use this value.

wmode 를 그다지 신경쓰지 않고 있던 부분이기 하지만 간과하기에는 너무 큰 performance 차이를 보였다. 실제 전에도 웹에 올리기 전(플래시 플레이어에서 확인했을시) 에는 별 무리 없이 돌아가던 사이트가 웹상에 올리고 나면  framerate 가 떨어지는 느낌을 받았던 적이 많았다.
이건 정확히 말하자면 웹상에 올려서라기 보단 html 로 사이트를 봤기 때문이란 생각이 든다.
이전에 포스팅한 에서 framerate 와 브라우저 간의 관계에서 브라우저 플러그인에서는 과도한 cpu 사용을 막기위한 방법으로 강제로 framerate를 떨어뜨리는 현상을 볼 수 있다.
그래서 html 페이지에서 플래시 파일을 확인하면 framerate 가 떨어지는 것이다.

보통 사이트 제작시에는 wmode 를 설정하지 않았다. default 인 window 로 설정한 것이다.
보통 wmode는 DHTML 을 flash 와 같이 사용하기 위해 설정하는 것으로 알고 있다.
하지만 wmode 와 performance 와의 상관관계가 상당부분 있는 것 같다.

대부분의 레퍼런스 문서나 자료에는 wmode 가 window 일때 가장 에니메이션 성능이 좋다고 나온다고 말하고 있지만 실제 테스트 결과 opaque 가 가장 좋은 framerate 를 보였다.
이부분이 가장 의문시 되었던 점이다. 분명 테스트를 해보고 레퍼런스를 제작했을텐데 왜 이런결과가 나오는 것일까?...레퍼런스에서 나오는 성능은 framerate와는 좀 다른 의미로 쓰인것일까 의문이 들었다.

하지만 이 의문점은 테스트를 하면서 자연스럽게 해결되었다. opaque 로 설정한후 테스트를하면 이전보다 훨씬 높은 framerate 를 보여준다. 하지만 performance 가 눈에 띄게 올라가게 된다.
이는 opaque 모드가 배경을 불투명으로 바꾸어 플래시로 하여금 부담을 줄여준 이유도 있겠지만
이 모드를 적용할시에 framerate 를 높인 이유가 클것이다.

하지만 opaque 모드는 framerate 가 높아지는 대신 cpu 사용량이 올라가게 된다.
사양이 좋은 컴퓨터에서는 큰 무리가 없겠지만 저 사양의 컴퓨터에서의 사용은 어느정도
고려해야한댜.

-----------------------------------------------------------------------------------


결론적으로 말해서

cpu점유율을 좀더 끌어올리더라도 자연스러운 애니메이션과 빠른 fps를 위해서는

opaque모드를 사용해야 한다.


각종 모드 테스트결과


http://justin.everett-church.com/wmode/



 

2008/08/15 20:29 2008/08/15 20:29
이 글에는 트랙백을 보낼 수 없습니다
플래시 공부하시기 좋은 사이트

투     맨  -  http://two-man.co.kr/
야웅닷컴 -   http://www.yawoong.com/
zposition  -  http://www.zposition.com/
플래시클럽 -  http://www.flashclub.co.kr/ 
디자인블랙 - http://designblack.com/
플래시제국 - http://www.jekuk.com/
나무야닷컴 - http://www.namooya.com/
2008/08/14 03:03 2008/08/14 03:03
이 글에는 트랙백을 보낼 수 없습니다

java.lang.OutOfMemoryError 

                     2005-05-31     송학렬    ㈜아이티플러스 기술지원부

이 문서는 기술지원 또는 개발 시 java.lang.OutOfMemoryError 를 만났을 때 원인 파악 및 해결방안 입니다.

java.lang.OutOfMemoryError 에는 크게 2가지 패턴이 있다고 볼 수 있습니다.(전적으로 개인적인 생각이지만..^^)

Java heap 메모리가 정말로 Full 되서 나는 종류가 있고 그렇지 않은데도 나는 종류가 있습니다.

그 둘 중에 어는 것 인지부터 가려내는 것이 가장 먼저 선행되어야 합니다.

Java 가상머신에는 메모리 구조가 여러단계로 나뉘어 져 있으므로 어느 영역에 의해 java.lang.OutOfMemoryError 가 나는지 알기 위해 JAVA OPTION으로 싸이트가 안정화 되기 전까진 verbosegc 또는 -XX:+PrintGCDetails  옵션을 추가해 놓는 것이 java.lang.OutOfMemoryError 났을 때를 대비해 좋은 습관이라 할 수 있습니다.

-verbosegc 또는  -XX:+PrintGCDetails  옵션으로 로그에 남는 heap 메모리 정보를 본 후 java.lang.OutOfMemoryError 가 날 때 heap이 꽉 차서 나는 것인지 아닌지 부터 판단합니다.

1.     Heap Memory Full 차지 않았을 때 1)     Perm 영역이 full 되는 경우

Permanent generation is full…

increase MaxPermSize (current capacity is set to: 134217728 bytes)

[Full GC[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor31282]

 810207K->802132K(1013632K), 8.3480617 secs]

<GC: 2 4  2465625.831280 10348 0 31 113802808 105534632 286326784 0 0 35782656 715849728 715848840 715849728 134217720 134023296 134217728 8.348677 8.348677 >

Passwd Check =============

<2005. 5. 19. 오전 9 32 23 KST> <Error> <HTTP> <BEA-101017> <[ServletContext(id=2536415,name=/,context-path=)] Root cause of ServletException.

java.lang.OutOfMemoryError

위와 같은 case 인 경우네는 Java 가상머신중에 Perm 영역이 full 차는 경우 입니다. 

Perm 영역에는 class object 및 관련된 meta data가 로드되는 곳인데 싸이트가 매우 많은 수의 class를 사용하는 경우 늘려줘야 하는 case도 있습니다.

얼마가 적정한 사이즈란 정답이 없는 것 같고 max가 계속 늘어나지 않고 일정한 사이즈를 유지 하면 됩니다.

             위 에러가 났을때는 -XX:MaxPermSize=256m  옵션으로 사이즈를 적당하게 늘려주는게 방

             법이며 늘려주었는데도 불구하고 Full 차는 시간만 늘어날 뿐 계속 사이즈가 늘어난다면 이 영역은 일반 비즈니스 프로그램으로 핸들링 할 수 없는 영역이므로 WAS 제품의 버그 및 jdk 버그로 보는 것이 일반적입니다.

       

2)     MAXDSIZ 사이즈 관련

  - Exception in thread “CompileThread0″ java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate

Possible causes:

         - not enough swap space left, or

         - kernel parameter MAXDSIZ is very small.

-          java.lang.OutOfMemoryError: unable to create new native thread

 

위 두 에러가 나는 이유는 Data 사이즈가 Full 차서 더 이상 메모리 할당을 할 수 없다는 java.lang.OutOfMemoryError 입니다.

Jdk도 내부적으로 c 라이브러리를 쓰고 jni를 통해서 c프로그램을 호출할 수 도 있는 환경에서 Data 영역이상으로 메모리 사용 시 위 에러를 만날 수 있습니다.

Heap 영역에는 java heap C heap이 있는데 C heap Data 메모리 영역에 영향을 미치는 것으로 보이며 보통 C의 전역 변수들이 잡히는 영역입니다.

위 현상을 만났을 때는 hp os MAXDSIZ가 너무 작게 잡혀있지 않은지 확인 후 적당한 크기로 늘려 줘야 합니다.

Glance 에서 shift+m 을 누른 후 jvm pid를 누르면 java가 사용하는 Data 사이즈를 모니터링 할 수 있습니다.

모니터링을 통해 적정한 사이즈로 MAXDSIZ를 늘려주어야 하며 만일 늘려 준게 에러 발생의 시간만 지연 시킬 뿐 계속 사용량이 늘어난다면 이는 사용하는 c라이브러리 쪽에 메모리 릭 버그가 있는 것이므로 c라이브러리를 체크 하셔야 합니다.

java.lang.OutOfMemoryError: unable to create new native thread

이 경우는 프로그램에서 Thread pool 프로그램 실수로 필요이상으로 쓰레드가 생성되는 경우도 과도하게 메모리를 사용할 수 있으므로 jvm 쓰레드 덤프를 통해 과도한 쓰레드가 생성되지 않았는지도 확인해 보셔야 합니다.

2.     Heap Full 찾을 때

이 경우는 java가 사용하는 heap 영역이 Full 되서 java.lang.OutOfMemoryError 가 나는 경우 인데 두 가지 패턴이 있습니다.

순간적으로 대량의 데이터를 메모리에 올리는 프로그램이 실행되어 문제를 야기 할수 있으며 다른 한 가지는 조금씩 메모리 릭이 발생하여 점차적으로 메모리가 쌓여 가는 경우 입니다.

두 가지 중에  어느 것인지 구별하는 것이 중요하며 이를 위해서도 마찬가지로 -verbosegc 또는  -XX:+PrintGCDetails  로그를 통해 순간적으로 메모리가 차는 것인지 조금씩 메모리가 차는 것인지를 확인하셔야 합니다.

1) 특정 프로그램의 특정시점의 과도한 메모리 사용에 의한 경우

                특정 프로그램이 과도하게 heap 메모리 이상 메모리를 사용하면서

java.lang.OutOfMemoryError가 발생하는 경우는 이 에러가 발생하는 시점의 쓰레드 덤프를 통해 어느 프로그램인지 쉽게 찾을 수 있습니다.

쓰레드 덤프에 메모리를 쓸만한 프로그램은 어느 정도의 자바프로그램 경험이 있으면 찾을 수 있습니다.

Ex)

“ExecuteThread: ‘36′ for queue: ‘default’” daemon prio=10 tid=0×0048e7b0 nid=48 lwp_id=4139729 runnable [0x23f32000..0x23f30500]

          at java.net.SocketInputStream.socketRead(Native Method)

          at java.net.SocketInputStream.read(Unknown Source)

          at oracle.net.ns.Packet.receive(Unknown Source)

          at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:71 8)

          at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:690)

          at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:373)

          at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1405)

          at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:889)

          - locked <0×35e8e3b0> (a oracle.jdbc.ttc7.TTC7Protocol)

          at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:242)

          - locked <0×36f66c98> (a oracle.jdbc.driver.OracleResultSetImpl)

          at weblogic.jdbc.pool.ResultSet.next(ResultSet.java:180)

          at Dcard.AAA.ejb.monitor.member.wbbb.WACBean.getInfoList(WACBean.java:5789)

java.lang.OutOfMemoryError 가 날 상황에 쓰레드 덤프를 두 세번 떠서 같은 쓰레드 번호로 위 같은 로직이 오래 결려있다면 이는 프로그램에서 while(rs.next()) 를 오랜 기간 돌면서 메모리에 DB로부터 읽어서 올리고 있다는 것을 의미 합니다 대량 데이터 조회가 일어나는 경우인 것 입니다.

이런 식으로 특정 프로그램의 특정 시점에 과도한 메모리 사용으로 인한 java.lang.OutOfMemoryError 에러는 쓰레드 덤프를 통해 찾을 수 있습니다.

물론 2번에서 설명 할 heap dump를 통해서도 찾을 수 있습니다.

2) 메모리 릭에 의해 조금씩 메모리가 쌓인 경우

JVM위 에서 실행중인 프로그램중에 어떤 것이 GC 대상에서 제외되는 영역에 data를 조금씩 쌓고 있다는 얘기입니다.

GC 대상에서 제외되는 영역은 다음과 같은 곳이 있습니다.

- Http Session에 넣는 데이터..(세션 타임아웃 또는 invilidate 씨 까지 제외됨)

- Static 변수

- 서블릿 또는 jsp의 멤버변수 ( WAS 기동 후 최초 호출 시 인스턴스 화 되어 WAS가 내려 갈 때 까지 사라지지 않음 )

- EJB의 멤버변수( pool안에서 객체가 존재하는 한 GC대상에서 제외)

          위 같은 영역에 프로그램에서 data add 하는 구조를 메모리 릭 이라고 할 수 있습니다.

           IBM 또는 SUN JDK 인 경우에는 heapdump를 통해서 분석하여 어느 데이터가 메모리를 많이 잡고 있는지를 알 수 있습니다.

           Heapdump 사용법 및 분석 법은 다음을 참조 하시면 됩니다.

 http://www.alphaworks.ibm.com/aw.nsf/FAQs/heaproots

http://www-1.ibm.com/support/docview.wss?uid=swg21190476

http://www-1.ibm.com/support/docview.wss?rs=180&context=SSEQTP&q1=heapdump+solaris&uid=swg21190608&loc=en_US&cs=utf-8&lang=en

http://www.skywayradio.com/tech/WAS51/IBMHeapDump/

출처 : http://www.javaservice.net/~java/bbs/read.cgi?m=etc&b=jdk&c=r_p&n=1117521098&p=1&s=t#1117521098

var viewer_image_url = “http://blogimgs.naver.com/blog20/blog/layout_photo/viewer/”; var photo = new PhotoLayer(parent.parent.parent); photo.Initialized(); window.onunload = function() { photo.oPhotoFrame.doFrameMainClose(); }.bind(this);

2008/07/31 17:57 2008/07/31 17:57
이 글에는 트랙백을 보낼 수 없습니다
안녕하세요.

원래 수줍어서 이런거 못올립니다만 .

다른분들이 해결방법을 찾으셧으면 해서 올립니다 .



전 img 및 script rpc 를 이용하여 값을 넘길때.

해당 페이지 or 받는 페이지가 utf-8 이면

받는페이지에서


------------------------------------------------------------------------------------

// 값이 아래와 같다면
$a = "http://comefeel.com/tt/comefeel/entry/윈도우XP-속도-200-빠르게-하기?info=nom&elch=18";

$b = parse_url($a);
echo "<pre>";
print_r($b);

------------------------------------------------------------------------------------

위와같이 한다면 한글 부분이 깨져서 나옵니다.
정확한 인코딩도 다 해봤으나 유효 불가해서 아래와 같이
그냥 -_- 무식하게 (parse_url 처럼 혹은 비슷 ) 나눠 봤습니다.

좀더 좋은 팁이 있거나 좋은거 알고계신분은 정보 공유 합시다.


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

// 값이 아래와 같다면
$a = "http://comefeel.com/tt/comefeel/entry/윈도우XP-속도-200-빠르게-하기?info=nom&elch=18";

preg_match('@(^.*):\/\/(.*?)/([^?]*)\??(.*)@', $a, $matches);

 echo "<pre>";
 var_dump( ($matches) );

=======================================
2008/07/11 19:27 2008/07/11 19:27
이 글에는 트랙백을 보낼 수 없습니다
분류없음  2008/06/27 16:21

#include <stdio.h>  

int arr[100][100];

void make_arr( int n)  
{  

 int i;  
 int in_num=1;  
 int x=0,y=-1,sw=1;  
 //in_num은 배열에 입력될 초기값  
 //x,y로 배열의 인자 위치를 좌표로 설정  
 //y가 -1인 이유는 반복문에서 초기 입력 위치 y를 [0]으로 만들기 위함.  


 

 while( n != 0 ){  

  //가로방향 진행  
  for(i=0 ; i<n ; i++)  
  {  

   y+=sw;  
   arr[x][y]=in_num++;  
  }  

  n--;    //가로->세로 , 세로->가로 진행시 칸수가 하나씩 줄어듬  


  //세로방향 진행  
  for(i=0 ; i<n ; i++)  
  {  

   x+=sw;  
   arr[x][y] = in_num++;  
  }  

  sw*=-1; //ex)가로 방향이 오른쪽으로 진행되면 다음 가로 방향은 왼쪽으로 진행됨  

 }  


}  

//반복문을 사용해서 만들어진 배열을 출력  
void print_arr( int n)  
{  
 int i,j;  

 for(i=0 ; i<n; i++)  
 {  
  for(j=0 ; j<n; j++)  
   printf("%4d%s",arr[i][j],j==n-1 ? "\n" : "\t");  
  //배열 크기가 [100][100]이기 때문에 최대 자릿수가 4자리가 됨으로 4d  
  //행의 끝에 다다르면 개행(\n) 그렇지 않으면 탭(\t)  
 }
}  


void main(void)  
{  

 int n;

 printf(" 종범년이 몇줄짜리로 만들까요? ");  

 scanf("%d",&n);  

 make_arr(n);  
 print_arr(n);  

}  


음냥 .. 이거 이외도 많은뎁 .. 더 있으면 링크점 .

2008/06/27 16:21 2008/06/27 16:21
이 글에는 트랙백을 보낼 수 없습니다
- 사용법 -
윈도우 상에서
1. 먼저 .jar 파일의 압축을 푼다.
2. cmd 창에서 압축이 풀린 디렉토리상으로 이동
3. 아래 명령어를 실행
    jad -r -d .\src -s java .\ifxjdbc\**\*.class
 
jad -r [-d<directory_for_source>] [<other_options>] <directory_width_classes>**\*.class
 
설명
-r : 해당 패키지 형태로 디렉토리 구조를 만듬(restore package directory structure)
-d : 디컴파일될 디렉토리(-d <dir> - directory for output files)
-s java : 디컴파일된 파일의 확장자를 java로 한다.
.\ifxjdbc\**\*.class : ifxjdbc 디렉토리 아래의 모든 클래스들 지정
 
***************************************
D:\work\framework\entity\...
D:\work\framework\resource\..
D:\work\framework\exception\...
이 디렉토리 아래에 class 파일이 존재할 경우 이 파일을 .java로 변환하기
 
D:\work>jad -r -d .\src -s java .\framework\**\*.class
**************************************
D:\work\framework\디렉토리 아래의 모든 .class 파일을 .java로 변환하여
D:\work\src\밑의 폴더로 만들어 준다.
**************************************
2008/06/01 15:11 2008/06/01 15:11
이 글에는 트랙백을 보낼 수 없습니다

▒ 비록 2005 지만 -_- 2008에서 거의 대부분 계승한다. 몇가지 빼고. 알아두면 좋당.

Ctrl-K, Ctrl-H : 바로가기 설정. ( 작업목록 창에서 확인가능 )
Ctrl-K,K : 북마크 설정 / 해제
Ctrl-K,L : 북마크 모두 해제
Ctrl-K,N : 북마크 다음으로 이동
Ctrl-K,P : 북마크 이전으로 이동
Ctrl-K,C : 선택한 블럭을 전부 코멘트
Ctrl-K,U : 선택한 블럭을 전부 언코멘트(코멘트 해제)
Ctrl-F3 : 현재 단어 찾기
  -> F3 : 다음 찾기

Ctrl-F7 : 현 파일만 컴파일
            : 현 프로젝트만 빌드
Ctrl-Shift-B : 전체 프로젝트 빌드
Ctrl-F5 : 프로그램 시작

Ctrl-i : 일치하는 글자 연속적으로 찾기
Ctrl+i 를 누르면 하단에 자세히보면, "증분검색" 이라는 텍스트가 나온다.
그러면 그때 찾기 원하는 단어를 입력할때마다 일치하는 위치로 바로바로
이동한다. (좋은기능)
타이핑은 "증분검색" 이라는 텍스트옆에 커서는 없지만 입력이된다.
입력하는 문자를 수정하려면, backspace로, 그만 찾으려면 엔터.

줄넘버 보여주기 : 도구 > 옵션 > 텍스트편집기 > 모든언어 > 자동줄번호 선택하면 됨.

Ctrl+ - (대시문자), Ctrl+Shift+ -  :
현재 커서를 기억하는 Ctrl+F3(VS6에서), Ctrl+K,K(VS7에서) 와는 달리
사용자가 별도로 입력을 해주는건 없고, 단지 이전에 커서가 있었던곳으로
위 키를 누를 때마다 이동된다. (shift를 이용하면 역순)

Ctrl-F12 : 커서위치 내용의 선언으로 이동( 즉, 대략 헤더파일 프로토타입으로 이동)

F12 : 커서위치 내용의 정의로 이동( 즉, 대략 CPP파일 구현부로 이동)

Shift+Alt+F12 : 빠른기호찾기 ( 이거 찾기보다 좋더군요. 함수나 define등 아무거나에서 사용)

Alt+F12: 기호찾기. (s+a+f12 비교해볼것)

Ctrl-M, Ctrl-L : 소스파일의 함수헤더만 보이기 (구현부는 감추고) (토글 키)
Ctrl-M, Ctrl-M : 현재 커서가 위치한 함수를 접는다/편다. (토글 키)

#include "파일명" 에서 "파일명" 파일로 바로 직접이동
하고 싶을경우 -> Ctrl-Shift-G


<편집>---------------------------------------------------------------------------
Ctrl-F : 찾기 대화상자
Ctrl-H : 바꾸기 대화상자
Ctrl-Shift-F : 파일들에서 찾기 대화상자
Ctrl-Shift-H : 파일들에서 바꾸기 대화상자
Ctrl-G : 해당 줄로 가기 (별로 필요없음)
Ctrl-K,Ctrl-F : 선택된 영역 자동 인덴트 (VS6의 Alt-F8기능)
Ctrl-] :괄호({,}) 쌍 찾기 : 괄호 앞이나 뒤에서 눌러서 닫거나,
여는 괄호이동
Ctrl-Shift-Spacebar : 함수이름편집중 툴팁으로나오는 함수와매개변수설명이 안나올경우, 강제로 나오게

alt-LButton ->Drag : 원하는 영역의 블럭을 세로로 잡기

Ctrl+Shift+R (키보드 레코딩) :
  가끔 연속된 연속기만으로는 부족한경우가 있다.
  이럴때, 몇번의 키동작으로 레코딩하여, 이것을 반복하고 싶은경우가있다.
  이때 Ctrl+Shift+R 을 누르고, 원하는 동작들을 수행후, 다시 Ctrl+Shift+R을
  눌러 종료한다.  이 중간동작을 원하는 위치에서 반복하고 싶다면
  Ctrl+Shift+P 를 누른다.
 
Ctrl+Shift+V (히스토리 붙이기) :
  Ctrl + V와는 달리 클립보드에 있는 복사된내용을 돌아가면서 붙여준다.
  따로 복사를 해주거나 할 필요는 없다. 그냥 Ctrl+C로 계속 원하는것을
  복사하면 된다.

Ctrl-Z : 이전으로 되돌리기

Ctrl-Shift-Z : 되돌렸다, 다시 복구하기



<디버그/빌드>-------------------------------------------------------------------------
F5 : 디버그 시작
F9 :디버그 브렉포인트 설정
Ctrl-F9 : 현위치 설정된 브렉포인트 해제
Ctrl-Shift-F9 : 모든 브렉포인트 해
Shift-F5 : 디버그 빠져나오기
Ctrl-F10 : 커서가 있는곳까지 실행
Shift-F11 : 현 함수를 빠져나감.

Shift+Ctrl+B :  전체 빌드(프로젝트가 여러개있을경우 모두 빌드)
Alt+B, C : 해당 프로젝트만 정리.
Alt+B, U : 해당 프로젝트만 빌드.


 

<창관련>-------------------------------------------------------------------------

Shift+Alt+Enter : 전체 창 (토글 됨)
F4 : 속성창 보여준다.
Ctrl+Alt+X : 리소스에디터 툴박스창
Ctrl+Alt+K : 작업목록 창.


 

비주얼 스튜디오를 쓰다가 단축키를 잊어먹거나 까먹어서 잘 못쓰는 경우가 많아 정리를 해보았다.

단축키 설명
Ctrl + Tab Edit하고 있는 Child Window 간의 이동
Ctrl + F4 현재 Edit하고 있는 Child Window를 닫기
Ctrl + I 문자열 입력 점진적으로 문자열 찾기 (Incremental Search)
Ctrl + F3 현재 커서에 있는 문자열 찾기 fowared (블록 지정 안 해도 됨)
Shift + F3 현재 커서에 있는 문자열 찾기 backward
F3 찾은 문자열에 대한 다음 문자열로 이동 (Next Search)
Ctrl + H 문자열 찾아 바꾸기 (Replace)
Ctrl + Left/Right Arrow 단어 단위로 이동
Ctrl + Delete 또는 Backspace 단어 단위로 삭제
Ctrl + F2 현재 라인에 북마크 지정/해제
F2 지정된 다음 북마크로 이동
Ctrl + Shift + F2 지정된 모든 북마크를 해제
F9 현재 라인에 Breakpoint를 지정/해제
Ctrl + Shift + F9 현재 Edit하고 있는 소스파일에 지정된 모든 Breakpoint 해제
Ctrl + ] 또는 E '{'괄호의 짝을 찾아줌 ('{'에 커서를 놓고 눌러야 함}
Ctrl + J, K #ifdef 와 #endif의 짝을 찾아줌
Ctrl + L 한 라인을 클립보드로 잘라내기 (Cut)
Ctrl + Shift + L 한 라인을 삭제
Alt + Mouse 블록 설정 세로로 블록 설정하기 (마우스로)
Ctrl + Shift + F8 세로로 블록 설정하기 (키보드로), 취소할 때는 Esc키를 눌러야 함
블록 설정 -> Tab 선택된 블록의 문자열을 일괄적으로 들여쓰기(Tab) 적용
블록 설정 -> Shift + Tab 선택된 블록의 문자열을 일괄적으로 내어쓰기 적용
Alt + F8 -> Tab 또는 Shift + Tab 들여쓰기 자동 조정 (Tab:들여쓰기, Shift + Tab : 내어쓰기)
Ctrl + T 현재 커서에 있는 변수/함수에 대한 Type이 Tooltip 힌트 창에 나타남
Ctrl + Alt + T 멤버 변수/함수 목록에 대한 팝업 창이 나타남
Ctrl + Shift + T 공백/콤마/파이프/괄호 등을 기준으로 좌우 문자열을 Swap시킴
Ctrl + Shift + 8 문단기호 표시/감추기 : Tab은 ^, Space는 .으로 표시
Ctrl + D 툴바의 찾기 Editbox로 이동
Ctrl + Up/Down Arrow 커서는 고정시키고 화면만 스크롤 시키기


디버깅에 관련된 단축키 하나 더.
변수이름을 적어 놓고 브래이크 포인터의 위치 여부와 관계 없이 변수의 내용을 추적하는 기능이 Watch Window에 들어 있다. 디버그 모드에서 추가하고픈 변수나 등등 앞에 커서를 위치 시킨후 Shift + F9를 누르면 그냥 바로 추가된다.


Tab 들여쓰기,자동완성
Shift+Tab 내어쓰기
블록 설정 >> Tab 선택된 블록의 문자열을 일괄적으로 들여쓰기(Tab) 적용
블록 설정 >> Shift+Tab 선택된 블록의 문자열을 일괄적으로 내어쓰기 적용



F2 설정된 북마크로 이동
F2 설정된 다음 북마크로 이동
F3 다음 단어 찾기
F4 다음 에러메세지로 이동
F5 Debugging 모드로 작동
F9 현재 라인에 BreakPoint를 설정/해제
F10 Debugging 모드로 작동하되 엔트리 포인트부터 시작
F12 마우스 오른쪽 버튼 눌렀을때 go to definition 단축기



Ctrl+Up/Down Arrow 커서는 고정시키고 화면만 스크롤 시키기
ctrl+*(맨오른쪽 부분) 위에서 F12 눌렀을때 이전화면으로 돌아가기
Ctrl+Left/Right Arrow 단어 단위로 이동
Ctrl+Delete 또는 Backspace 단어 단위로 삭제
Ctrl+Tab Edit하고 있는 Child Window 간의 이동
Ctrl+Space 인텔리센스 출력(멤버목록 팝업창)

Ctrl+F2 북마크 설정
Ctrl+F2 현재 라인에 북마크 지정/해제
Ctrl+F3 현재 커서에 있는 단어로 찾기
Ctrl+F4 현재 Edit하고 있는 Child Window를 닫기
Ctrl+F5 빌드 후 프로그램 실행
Ctrl+F10 Debugging 모드로 작동하되 커서의 위치까지

Ctrl+] 괄호 짝 찾기
Ctrl+] 또는 E {괄호의 짝을 찾아줌 ({에 커서를 놓고 눌러야 함}
Ctrl+A 전체 선택
Ctrl+B 브레이크 포인트 관리 메뉴
Ctrl+D 툴바의 찾기 Editbox로 이동
Ctrl+E 현재 괄호랑 맞는 괄호를 찾아준다.
Ctrl+F 현재 커서에 있는 단어로 찾기
Ctrl+G 라인 바로 가기(GoTo)
Ctrl+H 문자열 찾아 바꾸기 (Replace)
Ctrl+I >> 문자열 입력 점진적으로 문자열 찾기 (Incremental Search)
Ctrl+J, K #ifdef 와 #endif의 짝을 찾아줌
Ctrl+L 한 라인을 클낳링藥?잘라내기 (Cut)
Ctrl+T 현재 커서에 있는 단어의 툴팁정보 보기
Ctrl+U 모두 소문자로
Ctrl+W 클래스 위자드 (MFC 코딩시에만 사용)

Ctrl+Shite+Space 현재 가르키고 있는 함수의 매개변수 보기

Ctrl+Shift+F2 지정된 모든 북마크를 해제
Ctrl+Shift+F3 이전 단어 찾기
Ctrl+Shift+F8 열 블럭(키보드로), 취소할 때는 Esc키를 눌러야 함
Ctrl+Shift+F9 현재 Edit하고 있는 소스파일에 지정된 모든 Breakpoint 해제

Ctrl+Shift+8 문단기호 표시/감추기 : Tab은 ^, Space는 .으로 표시

Ctrl+Shift+L 한 라인을 삭제
Ctrl+Shift+P 매크로 실행
Ctrl+Shift+R 매크로 기록
Ctrl+Shift+T 공백/콤마/파이프/괄호 등을 기준으로 좌우 문자열을 Swap시킴
Ctrl+Shift+U 모두 대문자로

Ctrl+Alt+T 멤버 변수/함수 목록에 대한 팝업 창이 나타남



Alt+MouseMove 컬럼 Selection

Alt+B -> E Clean
Alt+B -> R Rebuild All
Alt+E+I 프로젝트 내의 모든 파일에서 찾기
Alt+G 그 함수가 선언된 파일이나 위치로 고!
Alt+O 헤더와 소스파일을 번갈아 보여줌

Alt+0 WorkSpace 윈도우
Alt+2 output 윈도우

Alt+F7 Project Setting
Alt+F8 들여쓰기 자동 조정
Alt+F9 브레이크포인트 관리

-----------------------------------------------------------------------------

2008/06/01 00:52 2008/06/01 00:52
이 글에는 트랙백을 보낼 수 없습니다

◎ 예약어 enum

* 열거자라고 불리는 집합의 원소들(식별자)을 선언 할수 있게 한다.
* 이 원소들의 유한 집합에 이름을 부여할 수 있게 한다.


enum day {sun,mon,tue,wed,thu,fri,sat};
이 선언은 사용자 정의 형 enum day를 생성한다. 예약어 enum다음에 오는 day가 태그 이름이다.  

열거자 = 식별자 : sun, mon ... sat등이며 int 형상수.

첫번째 원소는 0을 갖고 열거 순서에 따라 순차적인 정수 값을 갖는다.
     ⇒ enum day {sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6};

enum day d1,d2;
d1,d2를 enum day형으로 선언한 것. 이 변수들은 집합내의 원소들만 값으로 가질수 있다.
d1 = fri; d1은 5로 저장되있다. int형으로 값을 찍으면 5가 나온다.


※ enum자체는 자료형이 아니다. enum day가 자료형이다. 열거자는 초기화 될 수 있다. 열거자가 선언된 후 바로 변수를 선언할 수 있다.


ex1) enum suit {clubs=1, diamonds, hearts, spades} a, b, c;

clubs는 1로 초기화되있다. a, b, c는 같이 선언되었다.
clubs가 1로 초기화 되었기 때문에 diamonds=2, hearts=3, spades=4의 값을 갖는다.
enum suit {clubs=1, diamonds, hearts, spades} a, b, c;
         └> 형지정                                               └> 이 자료형의 변수

ex2) enum fruit{apple=7, peat, orange=3, lemon} fri;
apple가 7로 초기화 되어서 peat는 8의 값을 갖는다. orange가 3의 값이여서 lemon은 4 의 값을 갖는다.

ex3) enum veg {beet=17, corn=17}; vege1, vege2; 
동일한 값이 여러 식별자에게 허용될 수 있지만, 식별자는 중복되면 안되고 유일해야함.

ex4) enum {fir, pine} tree;
테그 이름이 반드시 필요한 것은 아니다. 테그 이름이 없으므로 변수 tree만이 선언되었을 뿐
 enum {fir, pine}형으로 다른 변수를 선언할 수 없다.


※ 일반적으로, 열거자는 프로그램-지정 상수로 취급, 프로그램의 명확성을 위해 사용. 만일 필요하다면, 열거자의 기본 값은 캐스트를 사용해 얻을 수도 있다. 한 함수내의 변수와 열거자는 서로 다른 유일한 식별자를 가져야 한다.


에제 :

Class Student

{

public:

enum {

Kim = 1,

Jung = 2,

Lee = 3

};

void Get(int student);

};


enum내 항목을 참조하려면

Student s;

s.Get(Student::Kim);

s.Get(Student::Jung);

s.Get(Student::Lee);

2008/05/17 02:38 2008/05/17 02:38
이 글에는 트랙백을 보낼 수 없습니다

5로 끝나는 두 자리 숫자의 2승을 순식간에 해치우는 방법!



5로 끝나는 두 자리 숫자에 한정되지만,

2승하는 방법은 정말 간단하다.



십자리의 숫자와 이에 1을 더한 수를 곱하고,

25를 뒤에 그냥 붙이면 된다.



이를 테면 35의 2승을 생각해 보자.



 35^2 = (3×(3+1))  & 25

        =  3×4 & 25


        = 1225

우왕ㅋ굳



 

2008/05/15 18:23 2008/05/15 18:23
이 글에는 트랙백을 보낼 수 없습니다

포인터가 포함된 구조체를 동적할당했다면 거기에 들어있는 포인터는 heap에 잡히는 거지만 일반적으로 함수의 블럭안에서 선언한 포인터라면, 즉 위의 경우에는 그 구조체를 가르키는 포인터, stack에 잡히는 거고.

static변수는 프로그램 종료까지 메모리를 잡고 있어서 별도의 data영역(code, data할때 그 data segment)이란 곳에 들어가고.

register는 사실 컴파일러가 알아서 최적화하므로 일반 인간이 신경쓸 필요는 없고 register붙여주면 여유공간이 있으면 들어가지만 없으면 개무시 결국 스택에 잡힘. 어느 경우든 register붙이면 &로 주소를 얻을 수 없음.

 그렇지?

2008/05/12 22:17 2008/05/12 22:17
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2024/05   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)