예제 #1
0
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));
}
예제 #2
0
파일: RProtect.cpp 프로젝트: nsxz/RProtect
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;
}
예제 #3
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;
}
예제 #4
0
파일: LogSvrLink.cpp 프로젝트: F5000/spree
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 ;
}
예제 #5
0
// 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;
}