CSingleLock는 Base Class가 없습니다.
CSingleLock 클래스의 객체는 다중 스레드 프로그램의 리소스에 대한 액세스를 제어에 사용되는 액세스 제어 메커니즘을 나타냅니다.
동기화 클래스인 CSemaphore, CMutex, CCriticalSection, 그리고 CEvent를 사용하기 위해서는, 당신은 CSingleLock 또는 CMultiLock중 Object 중 하나를 꼭 동기화 될 객체를 기다려야 합니다. CSingleLock은 사용자가 한 번에 하나의 객체를 기다릴 때 사용하고 CMultiLock은 여러 개의객체가 있을 때 특정한 시간에 사용할 수 있습니다.
CSingleLock
CSingleLock 개체 CSyncObject에서 파생 개체의 존재를 필요로합니다. 이것은 보통 관리 리소스의 클래스의 데이터 멤버입니다.
class CSingleLock { // Constructors public: CSingleLock(CSyncObject* pObject, BOOL bInitialLock = FALSE); // Operations public: BOOL Lock(DWORD dwTimeOut = INFINITE); BOOL Unlock(); BOOL Unlock(LONG lCount, LPLONG lPrevCount = NULL); BOOL IsLocked(); // Implementation public: ~CSingleLock(); protected: CSyncObject* m_pObject; HANDLE m_hObject; BOOL m_bAcquired; }; ///////////////////////////////////////////////////////////////////////////// // CMultiLock class CMultiLock { // Constructor public: CMultiLock(CSyncObject* ppObjects[], DWORD dwCount, BOOL bInitialLock = FALSE); // Operations public: DWORD Lock(DWORD dwTimeOut = INFINITE, BOOL bWaitForAll = TRUE, DWORD dwWakeMask = 0); BOOL Unlock(); BOOL Unlock(LONG lCount, LPLONG lPrevCount = NULL); BOOL IsLocked(DWORD dwItem); // Implementation public: ~CMultiLock(); protected: HANDLE m_hPreallocated[8]; BOOL m_bPreallocated[8]; CSyncObject* const * m_ppObjectArray; HANDLE* m_pHandleArray; BOOL* m_bLockedArray; DWORD m_dwCount; };
'MFC > Serial & Socket' 카테고리의 다른 글
Server에서 멀티소켓 관리하기 (0) | 2010.11.29 |
---|---|
Thread를 사용해서 Socket관리하기 (0) | 2010.11.29 |
SENDMESSAGE와 POSTMESSAGE 그리고 POSTTHREADMESSAGE
LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ); BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ); 원형은 같지만 차이점이 존재한다. SendMessage는 메시지 큐에 메시지를 추가하지 않고 관련된 메시지의 함수를 직접 호출하고 결과를 반환하는 함수. PostMessage는 hWnd윈도우의 메시지 큐에 바로 리턴하므로 메시지를 붙인 후 즉시 다른작업을 할 수 있지만 다른 메시지가 있으면 뒤에 붙인 메시지는 곧바로 처리되지 않는다. 즉 바로 처리해야 할 메시지가 아니면 Post 바로 처리해야 하면 SendMessage를 사용 결론: PostMessage:메시지 큐에 메시지를 추가하고 앞의 메시지가 완료된 후 처리 SendMessage:메시지 큐를 거치지 않고 메시지 핸들러 함수를 호출하여 곧바로 처리 PostThreadMessage : 쓰레드에 보내는 메시지고 나머지는 위와 같음 |
'MFC > Microsoft Foundation Class' 카테고리의 다른 글
SubclassDlgItem() (0) | 2011.01.05 |
---|---|
서브클래싱 [PreTranslateMessage함수] (1) | 2010.12.20 |
소켓통신 및 메신저 사용 함수 (2) | 2010.11.29 |
ListBox에서 마지막에 입력된 값이 Top인덱스로 설정 (0) | 2010.11.29 |
Thread안에서 Updatedata 에러 (0) | 2010.11.10 |
현재 접속중인 Socket의 IP주소 가져오기
{ CString ip = _T(""); UINT _port; GetPeerName(ip,_port); return ip; } |
자신의 IP주소 가져오기
CString GetLocalIP() { WORD wVersionRequested; WSADATA wsaData; char name[255]; CString ip; // 여기에 lcoal ip가 저장됩니다. PHOSTENT hostinfo; wVersionRequested = MAKEWORD( 2, 0 ); if ( WSAStartup( wVersionRequested, &wsaData ) == 0 ) { if( gethostname ( name, sizeof(name)) == 0) { if((hostinfo = gethostbyname(name)) != NULL) { ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); } } WSACleanup( ); } return ip; } |
CString변수에 특정 글자의 개수 카운트
int GetFindCharCount(CString msg,char find_char) { int msg_len = msg.GetLength(); int find_cnt = 0; for(int i =0 ; i<msg_len ; i++) { if(msg[i] == find_char) { find_cnt++; } } return find_cnt; } |
특정 글자의 앞까지 String 가져오기
void CClientSock::RECEIVE_LOGINLIST() { CSockThread* p = GetPointerTH(m_pThread); CDENT_MSG_CLIENTDlg* dlg = GetPointerDLG(m_pWnd); CString tempStr; CString Buf; char* buf = new char[1024+1]; memset(buf,0x00,sizeof(buf)); Receive(buf,1024+1); Buf = buf; int f_cnt; f_cnt = GetFindCharCount(Buf,'#'); for(int i =0 ; i < f_cnt ; i++) { AfxExtractSubString(tempStr,Buf,i,'#'); dlg->SendMessage(UPDATE_MEMBER,(WPARAM)&tempStr,(LPARAM)0 tempStr = _T(""); } DWORD re =dlg->SendMessage(THREAD_UPDATE,0,0); delete buf; } |
AfxExtractSubString(저장버퍼,원본데이터,인덱스,기준 문자)
'MFC > Microsoft Foundation Class' 카테고리의 다른 글
서브클래싱 [PreTranslateMessage함수] (1) | 2010.12.20 |
---|---|
SENDMESSAGE와 POSTMESSAGE 그리고 POSTTHREADMESSAGE (0) | 2010.11.29 |
ListBox에서 마지막에 입력된 값이 Top인덱스로 설정 (0) | 2010.11.29 |
Thread안에서 Updatedata 에러 (0) | 2010.11.10 |
CString 형식의 문자열에서 특정 문자 갯수 검색 (0) | 2010.11.10 |