kokudas.egloos.com

나름노력파

포토로그 마이가든



ftime. 프로그래밍(그냥공부하다가본것)

Geomatric Tool 에서는 ftime 함수를 사용하여 경과시간(fps, 프로세스 실행시간)을 구하고 있다.
좀 살펴보면 time() 함수의 확장판 정로도 생각하면 될 듯 하다.

살펴보면
#include <sys\timeb.h>
void ftime(struct timeb *buf);

이렇다..;;;
보이는 것 처럼 timeb 객체의 포인터를 인자로 선언하는데
timeb의 구조는

struct timeb {
  long time;
  short millitm;
  short timezone;
  short dstflag;
}
의 4가지 멤버로 구성되어 있다.

time 은 초단위(1970년 1월 1일 부터 현재까지) 이고
millitm 은 1/1000 초 단위를 표시이다.

============================================
즉, 지오메트릭툴은 1/1000초의 정확도를 가진 타이머를 제공하고 있다.



c/c++ 메크로에 대한 정리 프로그래밍(그냥공부하다가본것)

메크로에 기능과 사용법 중 모르는 것이 있어

이 참에 정리해 둔다.
#define PIE 3.14
//#define PIE 3.14; //;을 붙이면 printf("%lf\n", PIE)  <- 이렇게 못 쓴다.

#define SQUARE(x)   ((x)*(x))
//#define SQUARE(x)   x*x // SQUARE(2+3)  =>  2+3*2+3 = 11 ....... 

#define STR(x) #x //  STR(바보) => "바보"
#define LSTR(x) L##x // LSTR("바보")  => L"바보"

#define MAX(a,b) ( (a) >= (b) ) ? (a) : (b) // 꽤 많이 사용하는 일반 메크로

#define UNDIFINE 1

// #ifdef UNDIFINE
// int a=10;
// #else
// int a=11;
// #endif

끝으로
  - 상수형은 define 보다 const를 사용하는 것이 좋다. 메크로는 해당 문장을 그대로 붙여쓰는 것을 생각해 보면 왜 그런지 이해가 아주 쉽게 된다.
  - 새미콜론은 붙이지 말것. 실수하기 쉽다.
  - 괄호를 유의해서 작성. 좋은 예 SQUARE(x) ....('')

너무 쉬운걸 정리하고 있나... 어디까지나 내가 까먹었을 때 보기 위해 적는 것;;

mutable 키워드? 프로그래밍(그냥공부하다가본것)

 공부하다가 mutable라는 키워드를 봤다.

사전상 뜻은 변하기쉬운, 변덕스러운 이다.

일단 하는일은 const 깨기 이다. 상수를 수정이 가능하도록 만든다.

사용하는 방법은
=========================

class Some

{

private:

     mutable int v;

 

public:

     Some() { }

     void func() const { v=0; }

};

 

void main()

{

     Some S;

     S.func();

 

     const Some T;

     T.func();

}

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

예제 처럼 const를 아무 소용 없게 만든다.


좋은 기능은 아닌 듯 하다. 실제로 잘 쓰이지도 않는 단다.


하지만 간혹 쓰이는 경우가 있으니 일단 무슨일을 하는 녀셕인지 알아둘 필요가 있다.


처음 목격한 것은 Geomatric tools 의 해시 테이블 객체에서.....;


#define AAA(CLASS) #CLASS 프로그래밍(그냥공부하다가본것)

메크로의 정의 문장에 #이 삽입된 경우다.

간단히 예제를 만들어 보면

#define STRING(CLASS) #CLASS
class CTest
{
};

int main()
{
printf("%s\n", STRING(CTest) );
}

이런식으로 사용한다.

클래스를 선언한 이유는 클래스 이름이 들어갔다고 해서 클래스에 대한 어떤 일을 하는 것이 아니니까..
이런거에 헷갈리지 말라고...
왠만하면 안 쓰는 것이 좋을 것 같다.

system(), exec(), popen() 프로그래밍(그냥공부하다가본것)

오늘은 커널 명령어를 다른곳에서 실행하여 결과 값을 받는 것에 대한 공부를 했다.
Command.com과 같은 기능을 할 수 있도록 만드는 것이 목표.

찾아본 결과 실행할 수 있는 함수에는 

system(), exec(), popen()

가 있다.
system() - 문자열을 읽어들여 실행할 수 있는 것을 실행한다.(C:\>_ <- 이상황에서 넣는것이랑 같음.)

exec()  -  다양한 사용 방법이 있다.;;; 많아서 링크로.. (아주 심각하게 많지는 않다.) 
               테스트할때는 결과값이 계속 에러가 나왔다...;;

popen()  - 실행 후 결과값을 파일포인터로 반환한다.


이 세게의 함수를 보면
_CRTIMP FILE * __cdecl _popen(const char *, const char *);
_CRTIMP int __cdecl system(const char *);
_CRTIMP intptr_t __cdecl execl(const char *, const char *, ...);
이렇다.. 
popen 함수를 제외하고는 결과를 반환하지 않는다.
현재로서는 popen 함수는 지금 만드려는 프로젝트에 2가지가 맞지 않는 듯 하다.

경로에 대한 설정(ex- dir(현재경로 밖에 지원되지 않는다.), cd..(경로지정을 할수가 없어 이동이 불가능))
DOS창이 실행(popen의 경우 command.com을 실행하여 오픈하는 함수 인듯 하다.)

다른 방법을 찾아보던 중 ShellExcute 함수가 생각났다.
SW_HIDE 옵션이 있으니 어떻게든 해결이 가능 하지 않을까??

주말에 열심히 찾아봤지만 결론은 프로세스를 숨긴체 실행을 가능 하지만
실행에 대한 결과를 받아오기는 ShellExcute 함수로는 불가능 하다.;;

1 2 3 4 5 6 7