#include <cstdio>
#include <cstdlib>​
#include <sys/timeb.h>​
#include <ctime>
#include <ctime>


struct timeb timer_msec;
ftime(&timer_msec);

tm *ts = localtime(&timer_msec.time);

int year = ts->tm_year + 1900;
int month = ts->tm_mon + 1;
int day = ts->tm_mday;
int hour = ts->tm_hour;
int min = ts->tm_min;
int sec = ts->tm_sec;
int milli = timer_msec.millitm;




/////////////////////////////
c ++

#include <sys/time.h>
#include <chrono>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <iostream>​

auto time = std::chrono::system_clock::now();
auto mill = std::chrono::duration_cast<std::chrono::milliseconds>(time.time_since_epoch());

long long currentTimeMillis = mill.count();
int msc = currentTimeMillis % 1000;
long nowTime = currentTimeMillis / 1000;

tm *ts = localtime(&nowTime);

int year = ts->tm_year + 1900;
int month = ts->tm_mon + 1;
int day = ts->tm_mday;
int hour = ts->tm_hour;
int min = ts->tm_min;
int sec = ts->tm_sec;
char temp[1024] = { '\0' };
sprintf(temp, "%04d-%02d-%02d %02d:%02d:%02d.%d   \n",  year, month, day, hour, min, sec, msc);



Posted by 선화
for .. C

(HANDLE)_beginthreadex(NULL, 0, ClientConn, (void*)clntSock, 0, (unsigned *)&dwThreadID);


for .. C++

(HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall*)(void*))ClientConn, (void*)clntSock, 0, (unsigned *)&dwThreadID);


CreateThread 라는 함수도 있음..
Posted by 선화
  1. #include <iostream>
  2. #include <winsock2.h>
  3. #pragma comment(lib, "ws2_32.lib")
  4. using namespace std;

  5. const int MAX_LEN = 100;
  6. typedef struct
  7. {
  8.     SOCKET hClntSock;
  9.     SOCKADDR_IN clntAddr;
  10. }PER_HANDLE_DATA, *LPPER_HANDLE_DATA;

  11. typedef struct
  12. {
  13.     OVERLAPPED overlapped;
  14.     char buffer[MAX_LEN];
  15.     WSABUF wsaBuf;
  16. }PER_IO_DATA, *LPPER_IO_DATA;

  17. DWORD WINAPI CompletionThread(LPVOID ComplectionPortIO);
  18. void ErrorHandling(char * msg);

  19. int main(void)
  20. {
  21.     WSADATA wsaData;
  22.     HANDLE hCompletionPort;
  23.     SYSTEM_INFO SystemInfo;
  24.     SOCKADDR_IN servAddr;
  25.     LPPER_IO_DATA PerIoData;
  26.     LPPER_HANDLE_DATA PerHandleData;

  27.     SOCKET hServSock;
  28.     unsigned long RecvBytes;
  29.     unsigned long i, Flags;

  30.     if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
  31.         ErrorHandling("윈속초기화에러");

  32.     //1. Completion Port 생성
  33.     hCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL,0, 0);
      
  34. GetSystemInfo(&SystemInfo);

  35.     //2. 쓰레드를 CPU 개수만큼 생성.
  36.     for (i = 0; i < SystemInfo.dwNumberOfProcessors; i++)
  37.         CreateThread(NULL, 0, CompletionThread, (LPVOID)hCompletionPort, 0, NULL);

  38.     hServSock = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
  39.     servAddr.sin_family = AF_INET;
  40.     servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  41.     servAddr.sin_port = htons((u_short)atoi("9999"));

  42.     bind(hServSock, (SOCKADDR * )&servAddr, sizeof(servAddr));
  43.     listen(hServSock, 5);

  44.     while (true)
  45.     {
  46.         SOCKET hClntSock;
  47.         SOCKADDR_IN clntAddr;

  48.         int addrLen = sizeof(clntAddr);

  49.         hClntSock = accept(hServSock, (SOCKADDR *)&clntAddr, &addrLen);

  50.         // 연결된 클라이언트의 소켓 핸들 정보와 주소 정보를 설정.
  51.         PerHandleData =
  52. (LPPER_HANDLE_DATA)malloc(sizeof(PER_HANDLE_DATA));
  53.         PerHandleData->hClntSock = hClntSock;
  54.         memcpy(&(PerHandleData->clntAddr), &clntAddr, addrLen);
  55.        
  56.         //3. Overlapped 소켓과 CompletionPort의 연결.
  57.         CreateIoCompletionPort((HANDLE)hClntSock, hCompletionPort, (DWORD)PerHandleData, 0);

  58.         //클라이언트를 위한 버퍼를 설정, OVERLAPPED 변수 초기화
  59.         PerIoData = (LPPER_IO_DATA)malloc(sizeof(PER_IO_DATA));
  60.         memset(&(PerIoData->overlapped), 0, sizeof(OVERLAPPED));
  61.         PerIoData->wsaBuf.len = MAX_LEN;
  62.         PerIoData->wsaBuf.buf = PerIoData->buffer;
  63.         Flags = 0;

  64.         //4. 중첨된 데이터 입력.
  65.         WSARecv(PerHandleData->hClntSock,    // 데이터 입력소켓.
                    &(PerIoData->wsaBuf),        //데이터 입력 버퍼 포인터.
                    1,                            //데이터 입력버퍼의 수.
                    &RecvBytes,
                    &Flags,
                    &(PerIoData->overlapped),    //OVERLAPPED 변수 포인터.
                    NULL);
  66.     }
  67.     return 0;
  68. }

  69. DWORD WINAPI CompletionThread(LPVOID pComPort)
  70. {
  71.     HANDLE hCompletionPort = (HANDLE)pComPort;
  72.     DWORD BytesTransferred;
  73.     LPPER_HANDLE_DATA PerHandleData;
  74.     LPPER_IO_DATA PerIoData;

  75.     DWORD Flags;

  76.     while (true)
  77.     {
  78.         //5. 입. 출력이 완료된 소켓의 정보를 얻음.
  79.         GetQueuedCompletionStatus(hCompletionPort,    //Completion Port
                                      &BytesTransferred, //전송된 바이트수.
                                      (LPDWORD)&PerHandleData,
                                      (LPOVERLAPPED *)&PerIoData,
                                      INFINITE);

  80.         if (BytesTransferred == 0) // EOF전송시
  81.         {
  82.             closesocket(PerHandleData->hClntSock);
  83.             free(PerHandleData);
  84.             free(PerIoData);
  85.             continue;
  86.         }

  87.         //6. 메시지! 클라이언트로 에코.
  88.         PerIoData->wsaBuf.len = BytesTransferred;
  89.         WSASend(PerHandleData->hClntSock, &(PerIoData->wsaBuf), 1, NULL, 0, NULL, NULL);

  90.         //Receive Again
  91.         memset(&(PerIoData->overlapped), 0, sizeof(OVERLAPPED));
  92.         PerIoData->wsaBuf.len = MAX_LEN;
  93.         PerIoData->wsaBuf.buf = PerIoData->buffer;

  94.         Flags = 0;

  95.        WSARecv(PerHandleData->hClntSock, &(PerIoData->wsaBuf), 1, NULL, &Flags, &(PerIoData->overlapped), NULL);
  96.     }
  97.     return 0;
  98. }


  99. void ErrorHandling(char * msg)
  100. {
  101.     fputs(msg, stderr);
  102.     fputc('\n', stderr);
  103.     exit(1);
  104. }
Posted by 선화
이전버튼 1 이전버튼

블로그 이미지
선화

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함