요즘 게임서버를 스터디 하고 있는데 프로토콜을 맞추고 실행을 해보니.
이게 좀 이상하게 작동을 한다..소위 "순간이동" 을 한다..ㅠ
원인이 뭔지는 아직 잘 모르겠다.
서버로 돌리는 컴의 사양이 팬티엄3 라서 너무 느린건가 하는 의심도 가고 ..
뭐 대단한 기능이 있는 프로그램도 아니고 받은 데이타를 바로 다른 유저에게 쏴주는게 거의 대부분이라
뭐가 문제일까 고민을 했다.
이유가 뭘까? 옆에 개발자들의 조언을 들어보니 소스에 switch 문을 좀 많이 쓴거 아닌가 라는 의견이 있었다.
받는 데이타에 대한 분류를 switch문으로 했는데 그게 속도를 좀 잡아먹을수 있다는 말이었다.
그럼 어쩌란 말인가...프로토타입패턴이 나오고 해서 머리가 좀 아프다.
c++로 하면 편하겠지만 쪼매라도 빠르게 하고자...C로 작업하는데 뭔 클래스의 복사가 나오나..
"그냥 함수포인터 써...배열에 함수명 쭉 넣고...받는 인자값의 위치에 함수명 넣어..."
이렇게 이야기 해주면 참 편하잔아....
그래서 다시 보고자 한다..
함수포인터(Function Pointer)
자. 말그대로 함수를 가리키는 포인터다. 함수가 불러지는 메모리의 시작위치다.
설명은 어렵다..코드로 보자.
아래와 같이
void On0xA0(char* szText, int len) {
printf("Function test 11111\n");
}
void On0xA1(char* szText, int len) {
printf("Function test 22222\n");
}
typedef void (* Func_point )(char* szText, int len);
Func_point com_list[2] = { On0xA0, On0xA1};
void (*cmd_pt)( char* szText, int len);
void main() {
int i = 0;
for (i = 0; i < 2; i++) {
cmd_pt = com_list[buf_in[1] - 48];
cmd_pt(cp, buf_in, 0);
}
}
이게 좀 이상하게 작동을 한다..소위 "순간이동" 을 한다..ㅠ
원인이 뭔지는 아직 잘 모르겠다.
서버로 돌리는 컴의 사양이 팬티엄3 라서 너무 느린건가 하는 의심도 가고 ..
뭐 대단한 기능이 있는 프로그램도 아니고 받은 데이타를 바로 다른 유저에게 쏴주는게 거의 대부분이라
뭐가 문제일까 고민을 했다.
이유가 뭘까? 옆에 개발자들의 조언을 들어보니 소스에 switch 문을 좀 많이 쓴거 아닌가 라는 의견이 있었다.
받는 데이타에 대한 분류를 switch문으로 했는데 그게 속도를 좀 잡아먹을수 있다는 말이었다.
그럼 어쩌란 말인가...프로토타입패턴이 나오고 해서 머리가 좀 아프다.
c++로 하면 편하겠지만 쪼매라도 빠르게 하고자...C로 작업하는데 뭔 클래스의 복사가 나오나..
"그냥 함수포인터 써...배열에 함수명 쭉 넣고...받는 인자값의 위치에 함수명 넣어..."
이렇게 이야기 해주면 참 편하잔아....
그래서 다시 보고자 한다..
함수포인터(Function Pointer)
자. 말그대로 함수를 가리키는 포인터다. 함수가 불러지는 메모리의 시작위치다.
설명은 어렵다..코드로 보자.
#include <stdio.h>
int test(int i){
초간단 소스다.int test(int i){
return i*i;
}
int main(){
int main(){
int sum=0;
int (*fp)(int i);
fp=test;
sum = (*fp)(10);
printf("sum = %d",sum);
return 0;
sum = (*fp)(10);
printf("sum = %d",sum);
return 0;
}
int test(int i);
함수를 선언한다.아래와 같이
int (*fp)(int i);
이렇게 함수포인터를 참조할 함수와 동일한 형태로 만든다.fp=test;
할당 한다. 여기서 주의점은 함수명뒤에 아무것도 없다.
이걸 활용해 보자..
*******************************************************************************************************************
내용추가..
배열에 대입해서도 쓴다..
1. 타입을 선언하고..
2. 배열에 함수명을 넣고.
3. 배열값을 반환받아서 쓴다.
void On0xA0(char* szText, int len) {
printf("Function test 11111\n");
}
void On0xA1(char* szText, int len) {
printf("Function test 22222\n");
}
typedef void (* Func_point )(char* szText, int len);
Func_point com_list[2] = { On0xA0, On0xA1};
void (*cmd_pt)( char* szText, int len);
void main() {
int i = 0;
for (i = 0; i < 2; i++) {
cmd_pt = com_list[buf_in[1] - 48];
cmd_pt(cp, buf_in, 0);
}
}
참 쉽죠잉~~~