2014-09-22 3 views
0

Eclipse IDE 및 디버그 모드에서 Windows 7 OS에 사서함을 만들려고합니다. 나는 이클립스를 사용하여 Windows에서 메일 박스와 같은 RTOS (실시간 운영 시스템)를 만들려고한다.EnterCriticalSection 호출시 오류가 발생했습니다.

이 사서함에 대한 내 코드는 지금까지 모습입니다 :

RTX_Mailbox RTX_CreateMailbox (unsigned long nSlotSize, unsigned long nSlots, char* szName) 
{ 
    ::EnterCriticalSection (&csMailboxLock); 
    CMailBox* pNewMailbox = new CMailBox (nSlotSize, szName); 
    aMailBoxes.push_back (pNewMailbox); 
    RTX_Mailbox mailBox = ((unsigned int)aMailBoxes.size()) - 1; 
    ::LeaveCriticalSection (&csMailboxLock); 
    return mailBox; 
} 

내 응용 프로그램이 안타 :: EnterCriticalSection (& csMailboxLock)를 즉시 런타임에 충돌 유지;

그것은 (첨부 된 그림에서 강조)이 오류 메시지가 반환

: 텍스트

enter image description here

오류 메시지 :! 0x77d78e19

에서의 ntdll에 사용할 수있는 소스를 TpCallbackMayRunLong() 알려 주시기 바랍니다 자세한 내용이 필요한 경우 ...

+1

오류 메시지의 "그림"을 읽을 수 없습니다. 오류 메시지는 일반 텍스트입니다. 텍스트로 직접 복사하여 붙여 넣는 것에 대해 무엇이 어렵습니까? – Clifford

+0

내 PC에서 읽을 수 없으며 전에 이와 같은 질문에 대답했습니다. 나는 그것이 더 많은 세부 사항을 보여줄 것이고 더 이해하기 쉬울 것이라고 생각했기 때문에 나는 그림을 올렸다. 이것이 나의 질문에 찬성표를 던진 이유인가? 당신은 해결책을 찾았다는 것을 알기 위해 내려다 보았습니까? 도움을받을 수 없다면, 적어도 정당한 이유가 없다는 의미는 아닙니다. – Algorithmic

+0

귀하의 질문에있는 필수 정보를 읽을 수 없다는 것을 어떻게 알리는지를 알 수는 없습니다. 당신은 맞습니다. 내 브라우저의 줌을 250 %로 설정하면 읽을 수 있습니다! 여유 공간을 줄이기 위해 창 크기를 줄 였을 수도 있지만 텍스트 메시지는 여전히 텍스트로 렌더링하는 것이 가장 좋습니다. 가독성은 왜 당신이 질문에 직접 대답해야만하는지 설명 할 수 있습니다. – Clifford

답변

1

다른 사람이 동일한 문제가있는 경우 해결책을 찾았습니다.

크리티컬 섹션을 사용하기 전에 초기화해야한다고 밝혀졌습니다. 그래서 그것을 고정 다음이 저를 도운 링크입니다

InitializeCriticalSection(&csMailboxLock); 

: https://sites.google.com/site/jeff00coder00seattle/home/coding/cpp-coding/c-win32-critical-section-example

+0

자신의 대답을 * 답으로 표시 할 수 있습니다. – Clifford

1

"오류 메시지가"오류 메시지가 아니다, 그것은 단순히 나타냅니다 현재 프로그램 카운터의 소스 위치 (OS 호출 내)를 사용할 수 없습니다.

EnterCriticalSectiondocumentation은 매우 분명하다

중요한 부분을 사용하기 전에, 프로세스의 일부 스레드 개체를 초기화 할 InitializeCriticalSection 또는 InitializeCriticalSectionAndSpinCount를 호출해야합니다.

그런 경우 먼저 설명서를 참조하십시오.

관련 문제