static LRESULT CALLBACK FadeCtrl_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { LPFADECTRL lpfc = (LPFADECTRL)GetWindowLong(hwnd, GWL_USERDATA); switch (uMsg) { case WM_NCCREATE: lpfc = (LPFADECTRL)Mem_Alloc(sizeof(FADECTRL)); if (lpfc == NULL) return (FALSE); SetWindowLong(hwnd, GWL_USERDATA, (LONG)lpfc); return (TRUE); case WM_CREATE: lpfc->bFadingIn = TRUE; GetClientRect(hwnd, &lpfc->rc); lpfc->hwnd = hwnd; lpfc->pPageList = List_CreateList(PageList_CreateData, PageList_DeleteData, NULL, NULL, 0); return (TRUE); case WM_DESTROY: FadeCtrl_Deactivate(hwnd); List_DestroyList(lpfc->pPageList); break; case FC_ADDPAGE: List_AddNodeAtTail(lpfc->pPageList, (PVOID)lParam); return (TRUE); case FC_REMOVEPAGE: List_DeleteNode(lpfc->pPageList, List_GetNode(lpfc->pPageList, (INT)wParam)); return (TRUE); case FC_GETCURRENTPAGE: return ((LRESULT)lpfc->pfcCurrentPage); case FC_ACTIVATE: if ((lpfc->hTread = BEGINTHREADEX(0, 0, FadeCtrl_ThreadProc, lpfc, 0, &lpfc->dwThreadID)) == NULL) return (FALSE); // We don't need the handle so close it CloseHandle(lpfc->hTread); lpfc->bActive = TRUE; return (TRUE); case FC_DEACTIVATE: if (!PostThreadMessage(lpfc->dwThreadID, WM_QUIT, 0, 0L)) return (FALSE); // Still active lpfc->bActive = FALSE; return (TRUE); case FC_TOGGLEACTIVE: if (lpfc->bActive) return (FadeCtrl_Deactivate(hwnd)); else return (FadeCtrl_Activate(hwnd)); break; } return (DefWindowProc(hwnd, uMsg, wParam, lParam)); }
int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) { g_hInst = hinstExe; MessageBox(NULL, TIPS, TEXT("RProtect"), MB_OK); g_hDev = CreateFile(TEXT("\\\\.\\RProtect"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); if (g_hDev == INVALID_HANDLE_VALUE) { MessageBox( NULL, TEXT("出错:驱动未加载!\r\n") TEXT("本程序为半成品演示版,并没有安装驱动的功能,请使用第三方软件加载驱动程序后后再运行本程序!\r\n") TEXT("另外:本程序所带驱动没有数字签名,请开机F8禁用数字签名后再进行。\r\n"), TEXT("error"), MB_OK ); return 0; } g_hEvtUIReady = CreateEvent(NULL, FALSE, FALSE, NULL); HANDLE hThread = BEGINTHREADEX( NULL, 0, EventHandler, NULL, 0, NULL ); if (!hThread) MessageBox(NULL, TEXT("无法创建通讯线程!"), TEXT("err"), MB_OK); DialogBox(hinstExe, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlg_Proc); // terminate communication thread g_bOver = TRUE; WaitForSingleObject(hThread, INFINITE); //TerminateThread(hThread, 0); CloseHandle(hThread); CloseHandle(g_hDev); return 0; }
BOOL DFFileServer::CreateListenThread() { DWORD dwThreadId = 0; m_hThread = BEGINTHREADEX(NULL, 0, ListenThread, this, CREATE_SUSPENDED, &dwThreadId); if(m_hThread) { // 우선 순위를 조금 높게 하여 네트워크 메시지의 지연이 없도록 한다. // 어짜피 소켓 쓰레드는 대부분 블로킹 상태에 빠지므로 성능에 영향이 없다. SetThreadPriority(m_hThread, THREAD_PRIORITY_ABOVE_NORMAL); ResumeThread(m_hThread); return TRUE; } return FALSE; }
bool CLogSvr_Com::createCSCom( const char * cIP, const unsigned short port ) { m_bIsCreated = FALSE ; if( port == 0 || cIP == NULL ) { return true ; } int i = 0 ; m_cssock = 0 ; memset(m_ip,0,sizeof(m_ip)) ; strcpy( m_ip, cIP ) ; m_port = port ; // DS 에 연결하기 m_cssock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ; if( m_cssock == INVALID_SOCKET ) { printf( "INIT - CS_Com : Create ds socket failed\n" ) ; return false ; } SOCKADDR_IN addr; addr.sin_family = AF_INET ; addr.sin_port = htons( port ) ; addr.sin_addr.s_addr = inet_addr( cIP ) ; // if( connect( m_cssock, (sockaddr*)&addr, sizeof(addr) ) == SOCKET_ERROR ) { printf( "INIT - CS_Com : connect failed ( code = %d )\n", WSAGetLastError() ) ; return false ; } // 스레드 생성 : TCP/UDP DWORD dwID ; m_hThread = BEGINTHREADEX( NULL, 0, th_LogSendthread, (VOID*)this, 0, &dwID ) ; if( m_hThread == NULL ) { printf( "INIT - th_LogSendthread Cannot Start!!\n" ) ; return false ; } m_bIsCreated = TRUE ; return true ; }
// piProcessThread: IIocpProcessThread 인터페이스를 상속받은 // 클래스에 대한 포인터 즉 쓰레드 풀에 들어갈 // 쓰레드 함수가 구현된 클래스의 포인터 // nNumOfPooledThredad: 풀링할 쓰레드 개수, 0이면 디폴트 값에 맞추어짐 bool CIocpHandler::CreateThreadPool(IIocpProcessThread * piProcessThread, int nNumOfPooledThread) { if((piProcessThread == NULL) || (nNumOfPooledThread < 0)) { ServerLog()->Log("CreateThreadPool() failed."); return false; } if(nNumOfPooledThread == 0) { SYSTEM_INFO si; GetSystemInfo(&si); // 디폴트 쓰레드 수로 // 2 * 프로세서수 + 2 의 공식을 따랐음 (혹은 프로세서수 * 2) // 일단은 이 공식이 제일 났다고 하나.. 테스트를 해봐야 하지 않을까.. // 다음에 많은 사용자를 수용하게 되면.. 그때 하자. m_nCreatedThreadNumber = si.dwNumberOfProcessors * 2 + 2; } else { m_nCreatedThreadNumber = nNumOfPooledThread; } if((m_pThread = new HANDLE[m_nCreatedThreadNumber]) == NULL) return false; for(int i = 0; i < m_nCreatedThreadNumber; i++) { DWORD dwThreadId = 0; if((m_pThread[i] = (HANDLE) BEGINTHREADEX(NULL, 0, IocpWorkerThreadStartingPoint, piProcessThread, 0, &dwThreadId)) == NULL) return false; } return true; }