336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[CPP] Windows Service 간단하게 만들기

















Service.cpp

Service.h




Service 클래스 추가




stdafx.h 에 필요한 헤더파일 추가



#include <iostream>
#include <conio.h>
#include <WinSvc.h>





main.cpp 에 필요한 내용 추가



// ConsoleApplication5.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.

//

 

#include "stdafx.h"

#include "Service.h"

#include "ConsoleApplication5.h"

 

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

 

 

UINT MTServerThread(LPVOID pParam);

class CUpdateService : public CService{

public:

      CWinThread *_thread;

      void main(void){

            CService::Begin(_T("ConsoleApplication5"));

 

            // TODO : 서비스에서 실행 할 작업을 아래에 작성합니다.

 

            CService::End();

      }

protected:

      void OnStarted(){

            _thread = AfxBeginThread(MTServerThread, 0);

      }

      void OnStopped(){

            DWORD dwExitCode;

            GetExitCodeThread(_thread->m_hThread, &dwExitCode);

            WSACleanup();

      }

};

UINT MTServerThread(LPVOID pParam){

      return 0;

 

}

 

 

// 유일한 응용 프로그램 개체입니다.

 

CWinApp theApp;

 

using namespace std;

 

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

      int nRetCode = 0;

 

      HMODULE hModule = ::GetModuleHandle(NULL);

 

      if (hModule != NULL)

      {

            // MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.

            if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))

            {

                  // TODO: 오류 코드를 필요에 따라 수정합니다.

                  _tprintf(_T("심각한 오류: MFC를 초기화하지 못했습니다.\n"));

                  nRetCode = 1;

            }

            else

            {

                  // TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.

                  CUpdateService upServ;

                  if (argc == 2){

                        if (_tcscmp(argv[1], _T("-i")) == 0){

                             upServ.Install(_T("ConsoleApplication5"));

                        }

                        else if (_tcscmp(argv[1], _T("-u")) == 0){

                             upServ.Uninstall(_T("ConsoleApplication5"));

                        }

                        return true;

                  }

                  upServ.main();

            }

      }

      else

      {

            // TODO: 오류 코드를 필요에 따라 수정합니다.

            _tprintf(_T("심각한 오류: GetModuleHandle 실패\n"));

            nRetCode = 1;

      }

 

      return nRetCode;

}

 





'Programming > C,CPP,CS' 카테고리의 다른 글

WAVE form wFormatTag IDs  (0) 2018.04.04
CString Tokenize  (0) 2017.10.19
WaitForMultipleObjects  (0) 2017.04.19
How do I add my domain name to my computers host file?  (0) 2017.04.06
[VS2013] 힙이 손상되었습니다.  (0) 2017.04.05

wave player class

Programming/MFC 2017. 9. 27. 11:14 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

wave player class



1. mciCommand  (적극 권장)

KMedia.h  KMedia.cpp




2. vfw 
KMp3.h  KMp3.cpp




3. directShow 

mp3.h  mp3.cpp


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

연결 프로그램 변경 [레지스트리 편집]


JSP 파일을 메모장으로 열기 설정을 했습니다..



자.. 그럼 레지스트리를 고쳐볼까요?..

시작 -> 실행.. 을 눌러서 실행창을 띄웁니다..




그리고.. regedit.. 를 입력해서.. 레지스트리 편집기를 띄웁니다..



편집 -> 찾기를 누릅니다.. Ctrl + F 를 누르셔도 됩니다..



찾기에.. 잘 못 연결된 프로그램 파일 형식.. 확장자.. 그러니까 저는 .jsp 파일을 내용에 넣고 찾기를 시작하겠습니다..
문자열 단위로 일치.. 선택하시면.. 정확하게.. .jsp 파일만 찾습니다.. 



여기서 잠깐!.. 
"어랏!?.. 나는 파일 확장자가 안보이는데.. 이게 확장자가 뭐지?".. 하시는 분들도 계실겁니다..



그런 분들은.. 아래 더보기..를 눌러서 보세요..

더보기



아무튼.. 검색으로.. 나오긴 했는데.. 



이건 보기에도.. 너무 깔끔해 보입니다.. (기본값) 밖에는 안보이는군요..
이녀석 지워볼까요?.. 하지만.. 지우기엔 겁이납니다..

F3을 눌러서 다음 .jsp 를 찾던가.. 다시 찾기를 눌러서 .jsp 를 검색합니다..

계속 검색을 하다보니.. 어랏.. 이녀석은 뭔가 있어보입니다.. 특히 OpenWithList 가 눈에 확 들어옵니다..



OpenWithList 를 보니.. 역시.. 메모장이 보이는군요..



a부터 i까지 뭔가 연결되있는것 같습니다.. 연결프로그램을 열어보니.. 여기있는것과 똑같은 것들입니다..



이건 지워도.. 나중에 또.. 추가를 할 수 있으니.. 삭제해버립니다..
여긴.. 제가.. MRUList 는 체크 안했는데.. 같이 지워버리세요..



삭제하고.. 다시 연결 프로그램을 살펴봤는데.. 메모장.. 이녀석은 아직 살아있고..



이녀석도.. 그대로 입니다..



이.. 잡초같은 녀석!.. 이라고 욕하실것 까진 없습니다..

레지스트리 특성상.. 재시작을 해야만.. 변화가 있거든요..

저는 재시작하기는 귀찮고.. 로그오프를 하겠습니다;..

그리고.. 다시 로그인 하는 순간!.. 눈에 보이는 하얀색의 .jsp 파일!..




드디어.. 레지스트리 편집으로.. 연결 프로그램을 초기화하는 방법이 끝났습니다..

이렇게 해서도 연결 프로그램이 바뀌질 않는다면..

UserChoice 란게.. 있을수도 있는데.. 여기서도 값 데이터를.. 삭제해주시면 됩니다..



이렇게 해서도 안바뀌면..
.jsp 검색해서 나온것 중에서.. 값 데이터를.. 지우시고.. 아무것도 없이 넣으시면 됩니다..



위에 OpenWithList 의 기본값중에서 값 데이터를 지워도 상관없지만..
이걸 지우시면.. 알려진 파일 형식이 아니게 되어버려서.. 확장자가 표시가 됩니다..


그럼.. 조심해서 지우시구요.. 지우시기 전에.. 레지스트리 저장을 하시거나.. 어디에 옮겨 적으셔서..
복구를 하실 수 있게.. 조치를 취한 후에.. 하시길 바랍니다..

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

연결 프로그램 변경 [레지스트리 편집]


JSP 파일을 메모장으로 열기 설정을 했습니다..



자.. 그럼 레지스트리를 고쳐볼까요?..

시작 -> 실행.. 을 눌러서 실행창을 띄웁니다..




그리고.. regedit.. 를 입력해서.. 레지스트리 편집기를 띄웁니다..



편집 -> 찾기를 누릅니다.. Ctrl + F 를 누르셔도 됩니다..



찾기에.. 잘 못 연결된 프로그램 파일 형식.. 확장자.. 그러니까 저는 .jsp 파일을 내용에 넣고 찾기를 시작하겠습니다..
문자열 단위로 일치.. 선택하시면.. 정확하게.. .jsp 파일만 찾습니다.. 



여기서 잠깐!.. 
"어랏!?.. 나는 파일 확장자가 안보이는데.. 이게 확장자가 뭐지?".. 하시는 분들도 계실겁니다..



그런 분들은.. 아래 더보기..를 눌러서 보세요..

더보기



아무튼.. 검색으로.. 나오긴 했는데.. 



이건 보기에도.. 너무 깔끔해 보입니다.. (기본값) 밖에는 안보이는군요..
이녀석 지워볼까요?.. 하지만.. 지우기엔 겁이납니다..

F3을 눌러서 다음 .jsp 를 찾던가.. 다시 찾기를 눌러서 .jsp 를 검색합니다..

계속 검색을 하다보니.. 어랏.. 이녀석은 뭔가 있어보입니다.. 특히 OpenWithList 가 눈에 확 들어옵니다..



OpenWithList 를 보니.. 역시.. 메모장이 보이는군요..



a부터 i까지 뭔가 연결되있는것 같습니다.. 연결프로그램을 열어보니.. 여기있는것과 똑같은 것들입니다..



이건 지워도.. 나중에 또.. 추가를 할 수 있으니.. 삭제해버립니다..
여긴.. 제가.. MRUList 는 체크 안했는데.. 같이 지워버리세요..



삭제하고.. 다시 연결 프로그램을 살펴봤는데.. 메모장.. 이녀석은 아직 살아있고..



이녀석도.. 그대로 입니다..



이.. 잡초같은 녀석!.. 이라고 욕하실것 까진 없습니다..

레지스트리 특성상.. 재시작을 해야만.. 변화가 있거든요..

저는 재시작하기는 귀찮고.. 로그오프를 하겠습니다;..

그리고.. 다시 로그인 하는 순간!.. 눈에 보이는 하얀색의 .jsp 파일!..




드디어.. 레지스트리 편집으로.. 연결 프로그램을 초기화하는 방법이 끝났습니다..

이렇게 해서도 연결 프로그램이 바뀌질 않는다면..

UserChoice 란게.. 있을수도 있는데.. 여기서도 값 데이터를.. 삭제해주시면 됩니다..



이렇게 해서도 안바뀌면..
.jsp 검색해서 나온것 중에서.. 값 데이터를.. 지우시고.. 아무것도 없이 넣으시면 됩니다..



위에 OpenWithList 의 기본값중에서 값 데이터를 지워도 상관없지만..
이걸 지우시면.. 알려진 파일 형식이 아니게 되어버려서.. 확장자가 표시가 됩니다..


그럼.. 조심해서 지우시구요.. 지우시기 전에.. 레지스트리 저장을 하시거나.. 어디에 옮겨 적으셔서..
복구를 하실 수 있게.. 조치를 취한 후에.. 하시길 바랍니다..

'Programming > MFC' 카테고리의 다른 글

wave player class  (0) 2017.09.27
연결 프로그램 변경 [레지스트리 편집]  (0) 2017.09.27
[MFC] Dialog 닫기 (OnOK/EndDialog)  (0) 2017.02.08
CWnd::Invalidate  (0) 2016.11.15
MFC Dialog Position Save & Load  (0) 2016.11.10

[천안] 스터디룸, 스터디카페 정리

Tip 2017. 8. 16. 16:43 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[천안] 스터디룸, 스터디카페 정리




1.두두스터디룸

2.스터디라운지
3.우리동네(공간사이)
4.카페모모
5.(통북스)



1. 두두스터디룸

충청남도 천안시 서북구 월봉로 94 농협중앙회

041-571-0045


주차장    : (09~21) 무료

스터디룸 : (09~22) 


가격


스터디룸 이용시간 


기본 2시간 : 성인 5,000원 학생 4,000원 

( 1시간 추가 시 성인 3,000원 학생 2,000원 )


노트북 


1시간당 1,000원


빔 프로젝터 


1시간당 5,000원








2. 스터디라운지

충청남도 천안시 서북구 불당4로 91 엘리시온빌딩
041-557-7824

주차장    : 1시간 무료, 인근 공영주차장 주차가능

스터디룸 :  


가격


스터디룸 이용시간 


기본 2시간 : 3,000원 

( 1시간 추가 시 1,000원 )


노트북 


무료대여









3.우리동네

충청남도 천안시 서북구 늘푸른3길 37 홍은빌딩

041-903-0615


주차장    : 

스터디룸 :  24시


가격


스터디룸 이용시간 


기본 2시간 : 25,000원 (8~12명)

( 1시간 추가 시 10,000원 )


노트북 


무료대여







4.카페모모

  • 충남 천안시 동남구 중앙로 
  • 111





070-8116-7024

주차장    : 청소년수련관 지하주차장, 천안시 영상미디어센터 뒷편 주차장

스터디룸 :  카페 운영 시간


가격


스터디룸 이용시간 


평일 10:00 - 21:00

토요일 10:00 - 19:00

일요일 12:00 - 19:00


기본 3시간 : 1인 1잔 주문



노트북 


무료대여


빔프로젝터


3시간 3,500원














'Tip' 카테고리의 다른 글

Watch Dogs 무료  (0) 2017.12.19
EOS 홈페이지  (0) 2017.12.13
이오스(EOS) 상장 및 이벤트 공지  (0) 2017.12.13
GET TWO UBISOFT PC CLASSICS FOR FREE THIS DECEMBER  (0) 2017.12.11
[UPlay] World in Conflict 무료  (0) 2017.12.11

천안 코딩 과외합니다.

정보올림피아드 2017. 8. 8. 13:37 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

지역 : 천안, 아산, 청주

 

 

 

강의 과목 : 프로그래밍, 정보올림피아드, CCNA, CCNP, 코딩, 아두이노, 로봇

 

 

 

경력 : 지도학생) 2013 초등부 정보올림피아드 전국대회 은상 수상

 

         전) 서울 서울특별시립종합직업전문학교 외부강사

 

         전) 청주 그린컴퓨터학원 프로그래밍 강사

 

         전) 천안 그린컴퓨터학원 프로그래밍 강사

 

         전) 아산소재 대학교 시간강사

 

         전) 천안소재 대학교 시간강사

 

 

 

         현) 대학원 박사과정 재학중

 

         현) 기업부설연구소 연구원 근무중

 

 

 

 

과외 개설 조건 : 그룹 4인 이상시 개설 

( 현재 서울 거주중이라 주말 4인 이상 가능 시 강의 개설합니다. )

 

 

과외 장소 : 자택 / 학원 / 스터디룸 / ...... 모두 가능합니다.

 

 

 

 

자세한 문의는

 

 

대기 문의 및 올림피아드 대회 정보에 대한 문의도 주셔도 됩니다.

 

tansanc23@gmail.com 으로 문의해 주세요.

 

 

 

[삼각지역] 영덕식당

먹거리 2017. 7. 27. 17:22 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.










































[성수동/성수역] 청년다방

먹거리 2017. 7. 26. 16:22 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

































연차 휴가 일수 계산 방법

카테고리 없음 2017. 6. 14. 17:54 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

연차 휴가 일수 계산 방법

요약)

근로기준법 제60조에 기반하여 계산하여야 합니다.

연차 휴가 일수 계산 방법에는 크게 두가지가 있습니다.

1. 입사일 기준
2. 회계연도 기준

회사에서는 입사일 기준으로 관리하기에는 각 개인별 입사일이 다르므로 관리의 편의를 위하여
회계일 기준으로 계산하여 공지하는 경우도 있습니다.



간단한 예시부터 드리겠습니다.

입사일 2016.03.01
퇴사일 2017.05.01
(단, 이 계산에서는 1년동안 80%이상 출근을 하여야 합니다. )

1. 입사일 기준일 경우

2017.03.01 : 15일 발생

2. 계연도 기준일 경우

근무일수 : 2016.03.01~2016.12.31 총 306일

2017.01.01 : 306 / 365 * 15 = 12.57534246575342 일 발생


이 계산에 대해서 자세히 알아보도록 하겠습니다.




관련법)

http://www.law.go.kr/lsInfoP.do?lsiSeq=150421&efYd=20140701#0000

http://www.law.go.kr/법령/근로기준법/(20140701,12325,20140121)/제60조



의 해석)

① 사용자는 1년간 80퍼센트 이상 출근한 근로자에게 15일의 유급휴가를 주어야 한다. <개정 2012.2.1.> ​ 

​ 
 출근의 기준은 6항에서 자세히 다룹니다. 


② 사용자는 계속하여 근로한 기간이 1년 미만인 근로자 또는 1년간 80퍼센트 미만 출근한 근로자에게 1개월 개근 시 1일의 유급휴가를 주어야 한다. <개정 2012.2.1.> 
​ 
1년 미만인 근로자 또는 80퍼센트 미만 출근한 근로자는 1개월 개근 시 1일 유급휴가를 사용 할 수 있다. 
또한 1년 미만인 근로자가 6개월 개근 후 퇴사시 6일의 연차수당을 받을 수 있다. 

③ 사용자는 근로자의 최초 1년 간의 근로에 대하여 유급휴가를 주는 경우에는 제2항에 따른 휴가를 포함하여 15일로 하고, 근로자가 제2항에 따른 휴가를 이미 사용한 경우에는 그 사용한 휴가 일수를 15일에서 뺀다. 

최초 1년 간의 근로의 기준은 크게 입사일, 회계연도가 있습니다. 
1년 미만임에도 회사에서 주는 여름휴가를 이런식으로 추후에 발생할 연차에서 당겨쓰는 경우입니다. 

​ 
④ 사용자는 3년 이상 계속하여 근로한 근로자에게는 제1항에 따른 휴가에 최초 1년을 초과하는 계속 근로 연수 매 2년에 대하여 1일을 가산한 유급휴가를 주어야 한다. 이 경우 가산휴가를 포함한 총 휴가 일수는 25일을 한도로 한다. 

입사일 기준, 회계기준으로 연차가 달라지니 해당 기준으로 보아야합니다. 


⑤ 사용자는 제1항부터 제4항까지의 규정에 따른 휴가를 근로자가 청구한 시기에 주어야 하고, 그 기간에 대하여는 취업규칙 등에서 정하는 통상임금 또는 평균임금을 지급하여야 한다. 다만, 근로자가 청구한 시기에 휴가를 주는 것이 사업 운영에 막대한 지장이 있는 경우에는 그 시기를 변경할 수 있다. 


⑥ 제1항부터 제3항까지의 규정을 적용하는 경우 다음 각 호의 어느 하나에 해당하는 기간은 출근한 것으로 본다.  <개정 2012.2.1.> 

1. 근로자가 업무상의 부상 또는 질병으로 휴업한 기간 
​ ​ 
2. 임신 중의 여성이 제74조제1항부터 제3항까지의 규정에 따른 휴가로 휴업한 기간 


회사 및 근로복지공단에서 인정하여야 효력 발생 

⑦ 제1항부터 제4항까지의 규정에 따른 휴가는 1년간 행사하지 아니하면 소멸된다. 다만, 사용자의 귀책사유로 사용하지 못한 경우에는 그러하지 아니하다 



자세히)

1. 입사일 기준 연차 휴가 일수 계산

이 기준으로 계산하면 매년 입사일이 될 시 연차 휴가가 발생합니다.

case 1) 2016.03.01 입사

2017.03.01 : 15일 발생 ( ~ 2018.03.01 사용 )
2018.03.01 : 15일 발생 ( ~ 2019.03.01 사용 )
2019.03.01 : 16일 발생 ( ~ 2020.03.01 사용 )
2020.03.01 : 16일 발생 ( ~ 2021.03.01 사용 )
2021.03.01 : 17일 발생 ( ~ 2022.03.01 사용 )
2022.03.01 : 17일 발생 ( ~ 2023.03.01 사용 )




case 2) 2016.03.01 입사 ~ 2018.04.01 퇴사

2017.03.01 : 15일 발생 ( ~ 2018.03.01 사용 )
2018.03.01 : 15일 발생 ( ~ 2019.03.01 사용 )

누적 30일 발생



case 3) 2016.03.01 입사 ~ 2018.02.01 퇴사

2017.03.01 : 15일 발생 ( ~ 2018.03.01 사용 )

누적 15일 발생




2. 회계연도 기준 연차 휴가 일수 계산

이 기준으로 계산하면 매년 회계연도 기준일이 될 시 연차 휴가가 발생합니다.
회계연도 기준일( 01.01 일 경우)
case 1) 2016.03.01 입사

2017.01.01 : 15일 발생 ( ~ 2018.01.01 사용 )
2018.01.01 : 15일 발생 ( ~ 2019.01.01 사용 )
2019.01.01 : 16일 발생 ( ~ 2020.01.01 사용 )
2020.01.01 : 16일 발생 ( ~ 2021.01.01 사용 )
2021.01.01 : 17일 발생 ( ~ 2022.01.01 사용 )
2022.01.01 : 17일 발생 ( ~ 2023.01.01 사용 )




case 2) 2016.03.01 입사 ~ 2018.04.01 퇴사

2017.01.01 : 12일 발생 ( ~ 2018.01.01 사용 )
2018.01.01 : 15일 발생 ( ~ 2019.01.01 사용 )

누적 27 일 발생



case 3) 2016.03.01 입사 ~ 2018.02.01 퇴사

2017.01.01 : 15일 발생 ( ~ 2018.01.01 사용 )
2018.01.01 : 15일 발생 ( ~ 2019.01.01 사용 )
누적 30일 발생



정리하자면 

입사일 기준
case 2) 2016.03.01 입사 ~ 2018.04.01 퇴사
누적 30일 발생
case 3) 2016.03.01 입사 ~ 2018.02.01 퇴사
누적 15일 발생


회계연도 기준
case 2) 2016.03.01 입사 ~ 2018.04.01 퇴사
누적 27 일 발생
case 3) 2016.03.01 입사 ~ 2018.02.01 퇴사
누적 30일 발생


퇴사일이 입사일보다 앞인 경우는 회계연도로 계산시 유리하며
퇴사일이 입사일보다 뒤인 경우는 입사일로 계산시 유리합니다.






WaitForMultipleObjects

Programming/C,CPP,CS 2017. 4. 19. 09:39 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

WaitForMultipleObjects function


WaitForMultipleObjects는 뜻 그대로 여러개의 object handle이 지정된 상태나 일정 시간이 지날때까지 기다리는 함수이다. 예를들면 복수개의 thread가 모두 종료되기를 기다릴 때 사용할 수 있다. 사용방법은 다음과 같다.



DWORD WINAPI WaitForMultipleObjects( _In_       DWORD  nCount, _In_ const HANDLE *lpHandles, _In_       BOOL   bWaitAll, _In_       DWORD  dwMilliseconds );



  - nCount : lpHandles에 들어있는 object handle의 갯수이다. 최대 MAXIMUM_WAIT_OBJECTS (64개)만을 지정할 수 있다.
  - lpHandles : 함수가 기다릴 object handle의 배열이다. 이 배열은 서로 다른 종류의 obejct의 handle들이 들어갈 수 있다.
  - bWaitAll : TRUE이면 lpHandles의 모든 handle의 signal을 기다리고, TRUE이면 하나라도 signal이 오면 리턴된다. 후자의 경우 리턴값은 signal을 준 object가 된다.
  - dwMilliSeconds : bWaitAll에 의한 조건이 만족되지 않더라도 이 값에 의한 시간이 흐르면 함수는 리턴된다. 0이라면 즉시 리턴되고, INFINITE이면 무한정 기다린다.




WaitForMultipleObjects function

Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses.

To enter an alertable wait state, use the WaitForMultipleObjectsEx function.

Syntax

DWORD WINAPI WaitForMultipleObjects(
  _In_       DWORD  nCount,
  _In_ const HANDLE *lpHandles,
  _In_       BOOL   bWaitAll,
  _In_       DWORD  dwMilliseconds
);

Parameters

nCount [in]

The number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS. This parameter cannot be zero.

lpHandles [in]

An array of object handles. For a list of the object types whose handles can be specified, see the following Remarks section. The array can contain handles to objects of different types. It may not contain multiple copies of the same handle.

If one of these handles is closed while the wait is still pending, the function's behavior is undefined.

The handles must have the SYNCHRONIZE access right. For more information, see Standard Access Rights.

bWaitAll [in]

If this parameter is TRUE, the function returns when the state of all objects in the lpHandles array is signaled. If FALSE, the function returns when the state of any one of the objects is set to signaled. In the latter case, the return value indicates the object whose state caused the function to return.

dwMilliseconds [in]

The time-out interval, in milliseconds. If a nonzero value is specified, the function waits until the specified objects are signaled or the interval elapses. If dwMilliseconds is zero, the function does not enter a wait state if the specified objects are not signaled; it always returns immediately. If dwMilliseconds is INFINITE, the function will return only when the specified objects are signaled.

Return value

If the function succeeds, the return value indicates the event that caused the function to return. It can be one of the following values. (Note thatWAIT_OBJECT_0 is defined as 0 and WAIT_ABANDONED_0 is defined as 0x00000080L.)

Return code/valueDescription
WAIT_OBJECT_0 to (WAIT_OBJECT_0 +nCount– 1)

If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled.

If bWaitAll is FALSE, the return value minus WAIT_OBJECT_0 indicates the lpHandles array index of the object that satisfied the wait. If more than one object became signaled during the call, this is the array index of the signaled object with the smallest index value of all the signaled objects.

WAIT_ABANDONED_0to (WAIT_ABANDONED_0nCount– 1)

If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled and at least one of the objects is an abandoned mutex object.

If bWaitAll is FALSE, the return value minus WAIT_ABANDONED_0 indicates the lpHandles array index of an abandoned mutex object that satisfied the wait. Ownership of the mutex object is granted to the calling thread, and the mutex is set to nonsignaled.

If a mutex was protecting persistent state information, you should check it for consistency.

WAIT_TIMEOUT
0x00000102L

The time-out interval elapsed and the conditions specified by the bWaitAll parameter are not satisfied.

WAIT_FAILED
(DWORD)0xFFFFFFFF

The function has failed. To get extended error information, call GetLastError.