int main(int argc, char* argv[])
{
	//TestFunc() 함수를 호출할 때마다 다른 nData 값을 반환 받는다.
	printf("%d\n", TestFunc());
	printf("%d\n", TestFunc());
	printf("%d\n", TestFunc());
	return 0;
}
Example #2
0
int main(int argc, char* argv[])
{
    std::cout << TestFunc() << std::endl;

    std::cout << TestFunc(20) << std::endl;

    return 0;
}
Example #3
0
void *thread_routine(void *arg)
{
	pthread_mutex_lock(&mutex);
		TestFunc(1);
	pthread_mutex_unlock(&mutex);
	pthread_exit(0);
}
Example #4
0
int main(void)
{
	int threadcount = 10;
	int loopcount = 100;
	printf("plase input thread count:\n");
	scanf("%d", &threadcount);
	printf("plase input loop count:\n");
	scanf("%d", &loopcount);
	pid_t pid;
	int i, j;
	for (i = 0; i < threadcount; ++i) {
		pid = fork();
		if (-1 == pid) {
			return 1;
		}
		if (0 == pid) {
			for (j = 0; j < loopcount; ++j) {
				TestFunc(j);	
			}
			exit(0);
		}
	}
	while (1) {
		pid_t pid = wait(NULL);
		if (-1 == pid) {
			if (errno == EINTR ) {
				continue;
			}
			break;
		}
	}
	return 0;
}
int main()
{
    write_line("Calling test function");
    TestFunc();
    write_line("After test function");
    return 0;
}
Example #6
0
FP Flow::Test(Func F, FP Val) {
    LMax = LMAX();
    LMin = 0.01;
    iter = 0;

    do {
        iter++;
        TestLam = (LMax + LMin)/2;
        if(TestFunc(F,TestLam) < Val) {
            LMax = TestLam;
        } else {
            LMin = TestLam;
        }

        if(iter > 100) return -1;
    }while(fabs((Val - TestFunc(F,TestLam))/Val)>0.01);

    return TestLam;
}
Example #7
0
bool CSnowboard::InitModule( HWND hWnd )
{
	LOGGER.Init(NULL , NULL , NULL , NULL );
	FRAMEMEMORY.Init( 1024 * 1024 );
	LOG_WARNING( "Init FrameMemory = %d Byte" , FRAMEMEMORY.GetSize() );

	InitRenderer( hWnd );
	InitResource( m_pRenderer->GetDevice() );

	TestFunc();

	return true;
}
Example #8
0
int main(int argc,char **argv)
{
  GrEvent ev;

  GrSetMode(GR_biggest_graphics);
  GrEventInit();
  GrMouseDisplayCursor();
  TestFunc();
  PrintInfo();
  GrEventWait(&ev);
  GrEventUnInit();
  GrSetMode(GR_default_text);
  return(0);
}
void foreachTest::DoExecute()
{
	int a[]={1, 2, 3};

/*
	std::for_each(a, a+_countof(a), foreachTestFunc);

	std::for_each(a, a+_countof(a), TestFunc());	
*/

	FOREACH(a, foreachTestFunc);

	FOREACH(a, TestFunc());

	BOOST_FOREACH(int iA, a)
	{
		if(iA > 1)
			break;

		std::cout << iA << std::endl;
	}

	return ;
}
Example #10
0
int main(void) {
	// 함수에 대한 고급 이론1
	// c 전문가가 되려면 반드시 알아야 할 챕터

	// 함수의 본질 또한 주소상수다.
	// 배열은 유도형 자료. 
	// 함수는 함수형 자료.
	// 반환형식 호출규칙 함수이름();
	
	// 코드 최적화 = 안해도 되는걸 찾아서 안하면 됨. 코드 군살 빼기

	// 함수 호출 규칙 calling convention
	// 스택은 선형 자료구조. 자료 입출력하는 곳이 한곳. push and pop. 입출력하는 곳이 두개면 queue.
	// main() -> TestFunc(int nParam)
	// TestFunc nParam
	//			b
	// main		a
	// TestFunc 작업이 완료되면 TestFunc는 스택에서 사라지고, 담겨있던 매개변수(nParam)도 사라진다.
	// 메모리 할당 해제가 자동으로 되는 거지.
	// 그래서 자동변수라고 부른다.

	// 호출규칙 정리
	// 매개변수 할당 해제(스택 정리)를 누가 할거냐 정해주는 것
	// 1. __cdecl (default) 비쥬얼 스튜디오 설정에서 설정 가능. 설정 > c/c++ > 고급 > 호출규칙
	// 씨디클러레이션~ 호출자(Caller)가 스택 정리(ESP Register=스택포인터가 한다.)
	int nResult = 10;
	GetMax(1, 2, 3);

	// 그럼 현재 스택프레임에는 아래서부터 nREsult, c, b, a, nMax 순으로 들어가 있음
	// 디스어셈블리를 보면 
	// 00CB1760  add         esp,0Ch <--- 이부분이 스택 정리하는 어셈블리어
	// 0C 는 12. 왜 12일까? 매개변수 int형 3개. 4*3=12
	// 이 라인이 main 함수 안에 있다.

	// 2. __stdcall 스탠다드콜. (win32 api등의 표준규약) 피호출자 함수가 정리한다.
	// 009F1765  add         esp,0CCh

	// 3. __fastcall 패스트콜.
	// 스탠다드콜과 거의 동일. 
	// 차이는 매개변수를 스택을 이용해 복사하지 않고 값을 레지스터에 넣어서 넘김. 속도가 쪼금 빨라짐.
	// 스탠다드콜은 ram(스택) 에서 ram(스택)으로 카피
	// 패스트콜은 레지스터 에서 ram(스택)으로 카피가 된다. 

	// 스탠다드콜, 패스트콜 언제 쓸까? -> 컴파일러가 결정. 고민하지 말자..

	// 그럼 이걸 왜 씀?
	// __cdecl은 호출자가 정리를 해야하므로 스택정리 코드가 덧붙어서 크기가 좀 커짐
	// 하지만 가변인자 함수를 지원해준다.
	// __stdcall은 스택을 정리하기 위한 명령어 한줄이 줄어든다.
	// 따라서 함수가 자주 불리는 환경에서 빠른 속도와 프로그램의 전체적인 사이즈를 줄여주게 됨.
	// __stdcall은 빠르지만, 가변인자를 받을 수 없다.
	// 그 이유는, 호출자 함수는 가변 인자의 스택 크기를 알지만
	// 피호출자 함수는 가변 인자의 스택 크기를 알 수 없기 때문




	// 포인터는 주소저장형식
	// 가리키는 대상의 형식이 int면 int *Ptr 이라고 쓰잖아?
	// 그렇다면 함수형식이라면 어떻게 써야 할까?
	// 아래는 동일하다. 함수 이름은 주소이므로! 배열이랑 똑같네..?
	void *pData = main;
	printf("%p\n", pData);
	printf("%p\n", main);

	TestFunc("");
	int nData = (int)TestFunc;
	// nData(); //이건 불가능
	((int(*)(char*))nData)(""); //이건 가능! 헐! 이게 무슨 말이냐..;;

	MyTest(TestFunc, 10); //이렇게도 호출이 됨! 매개변수로 함수를 넘김!


	// 그렇다면 역호출이란 뭘까?
	int aList[5] = { 20, 50, 10, 30, 40 };
	// 정렬을 하고 싶다
	qsort(aList, 5, sizeof(int), MyCmp); // 정렬이 되네!?

	// qsort() 함수는 철수가 만들고
	// main() 함수는 영희가 만듦
	// main에서 qsort call할때, MyCmp 주소를 매개변수로 넘기면,
	// qsort에서 MyCmp 함수를 콜백할 수 있다. 
	// 내가 만든 함수를 내가 call하지 않음. 
	// 그래서 어렵다. 흐름이 끊기거든!
	// 콜백함수는 결국 함수주소를 '등록'하는 것.

	for (int i = 0; i < 5; ++i) {
		printf("%d\n", aList[i]); // 10 20 30 40 50
	}

	// 유저레벨에서 함수 만들고 &함수를 커널에 등록해주면
	// 커널(os)가 주기적으로 call한다. 언제? 왜? 몇번이나 부르지? 모름. 커널이 안다.
	// 커널이 정한 규칙대로 등록을 해놓으면, 알아서 호출이 됨
	// 비동기적인 특성을 가짐

	// qsort함수는 왜 콜백 구조로 만들었을까?
	// qsort함수는 평균정렬속도가 가장 빠르다고 알려진 정렬 알고리즘임
	// '무엇'을 정렬하는데, 여기서 '무엇'인지에 따라 비교방법은 달라질 것이다.
	// 만약 배열이 int가 아닌 char* 라면
	char* strList[5] = {
		"황남빵",
		"바나나빵",
		"감자",
		"나비",
		"스타벅스",
	};

	qsort(strList, 5, sizeof(char*), MyStrCmp); // MyCmp 함수로는 당연히 정렬이 안된다!!! 

	for (int i = 0; i < 5; ++i) {
		printf("%s\n", strList[i]);
	}
	
	// 이렇게 하면 가능
	// 만약 정렬해야할것이 그림이라면? 사람 수대로 정렬하라...
	// 이건 비교로직과는 아무 관련이 없잖소?
	// 그래서 비교하는 방법은 당신이 짜세요.
	// 콜백함수는 인터페이스라고 볼 수 있음. 함수형 프로그래밍이네.

	// 함수포인터 + Lookup 배열 = 스위치문을 완벽 대체 가능
	void(*pfList[3])(int) = {
		TestFunc1, TestFunc2, TestFunc3
	}; // 함수에 대한 포인터 변수네.. 모양이 좀 어려워서 그렇지 별거 없다.
	int nInput;
	printf("호출할 함수 인덱스 입력하세요.\n");
	scanf_s("%d", &nInput);
	pfList[nInput](10); //이렇게도 호출 가능 ㅋ nInput에 따라 다른 함수를 호출한다. ^^
	// 자바스크립트로 하면 더 간단할듯... 

	return 0;
}
Example #11
0
int main(int argc, char* argv[])
{
  try
  {
	  TestFunc("TestCStyle", 		&TestCStyle);
	  TestFunc("TestStreamStyle", 	&TestStreamStyle);
	  TestFunc("TestStringStyle", 	&TestStringStyle);

	  /*
	  std::string chars(
	          "abcdefghijklmnopqrstuvwxyz"
	          "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	          "1234567890");

	  boost::random::random_device rng;
	  boost::random::uniform_int_distribution<> index_dist(0, chars.size() - 1);

	  std::vector< unsigned char > vecRnd(200);

	  for(int i = 0; i < vecRnd.size(); ++i)
	  {
		  vecRnd[i] = chars[index_dist(rng)];
	  }
	  std::cout << &vecRnd.front() << std::endl;

	  std::cout << CalcMD5(&vecRnd.front(), vecRnd.size()) << std::endl;
	  /*
    if (argc != 5)
    {
      std::cerr << "Usage: " << argv[0] << " <host> <port> <user> <pass>\n";
      return 1;
    }*/
	 // smtp.gmail.com 25 [email protected] strenght1986
/*
    boost::asio::io_service io_service;
    boost::asio::ssl::context ctx(io_service, boost::asio::ssl::context::sslv23);
    ctx.set_verify_mode(boost::asio::ssl::context::verify_none);

    boost::asio::ip::tcp::resolver resolver(io_service);
    boost::asio::ip::tcp::resolver::query query("smtp.gmail.com", "465");
    boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);

    boost::asio::ip::tcp::endpoint endpoint = *iterator;

    boost::asio::ssl::stream< boost::asio::ip::tcp::socket > socket_(io_service, ctx);
    boost::asio::streambuf buff_; //for receiving
    std::string str_req; //for sending


    socket_.lowest_layer().connect(endpoint);
    socket_.handshake(boost::asio::ssl::stream_base::client);

    std::string sMessage = "HELO servername";
    socket_.write_some(boost::asio::buffer(sMessage));
    const std::size_t nReaded = boost::asio::read_until(socket_, buff_, "\r\n");

    boost::asio::streambuf::const_buffers_type bufs = buff_.data();

    const std::string sReply(
    		boost::asio::buffers_begin(bufs),
    		boost::asio::buffers_begin(bufs) + nReaded);

    std::cout << sReply << std::endl;

    client c(io_service, ctx, endpoint);
    io_service.run(); //should execute till handshake completes
    //read the pop3 greeting
    io_service.reset();
    io_service.post(boost::bind(&client::read,&c));
    io_service.run();


    std::string str_cmd;

    WRITE("HELO servername");
    WRITE("AUTH LOGIN");
    WRITE(ToBase64("*****@*****.**"));
    WRITE(ToBase64("strenght1986"));
    WRITE("MAIL FROM:<*****@*****.**>");
    WRITE("RCPT TO:<*****@*****.**>");
    WRITE("DATA\r\nSubject:  Hello from CLRN!");

    WRITE("SMTP test\r\n.");
    WRITE("QUIT");

    /*
    str_cmd="USER [email protected]\r\n";
    io_service.reset();
    io_service.post(boost::bind(&client::write,&c,str_cmd));
    io_service.run();

    str_cmd="PASS strenght1986\r\n";
    io_service.reset();
    io_service.post(boost::bind(&client::write,&c,str_cmd));
    io_service.run();



    //  io_service.reset();
  //  io_service.post(boost::bind(&client::write,&c,str_cmd));
  //  io_service.run();
    //get how many messages are in the inbox
    str_cmd="LIST\r\n";
    io_service.reset();
    io_service.post(boost::bind(&client::write,&c,str_cmd));
    io_service.run();

    str_cmd="RETR 1\r\n";
    io_service.reset();
    io_service.post(boost::bind(&client::write,&c,str_cmd));
    io_service.run();

    //quit the pop3 session
    str_cmd="QUIT\r\n";
    io_service.reset();
    io_service.post(boost::bind(&client::write,&c,str_cmd));
    io_service.run();*/
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }
  return 0;
}
Example #12
0
int main(int /*argc*/, char* /*argv[]*/)
{
	TestFunc();
	system("pause");
	return 0;
}