Я пытаюсь создать почтовый ящик на ОС Windows 7 в Eclipse IDE и в режиме отладки. Я пытаюсь создать RTOS (операционную систему реального времени), такую как почтовый ящик в Windows, используя Eclipse.
Вот так выглядит мой код для почтового ящика:
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);
Он возвращает это сообщение об ошибке (выделено на картинке в приложении):
Сообщение об ошибке в тексте: источник недоступен для ntdll! TpCallbackMayRunLong () в 0x77d78e19
Пожалуйста, дайте мне знать, если требуется дополнительная информация …
Так что я нашел решение, если бы у кого-то была такая же проблема.
Оказывается, вам нужно инициализировать критический раздел, прежде чем использовать его. Таким образом, следующее исправило это:
InitializeCriticalSection(&csMailboxLock);
Это ссылка, которая помогла мне:
https://sites.google.com/site/jeff00coder00seattle/home/coding/cpp-coding/c-win32-critical-section-example
«Сообщение об ошибке» не является сообщением об ошибке, оно просто указывает, что источник для текущего местоположения счетчика программы (внутри вызова ОС) недоступен.
документация за EnterCriticalSection
довольно ясно:
Перед использованием критического раздела, какой-то поток процесса должен вызвать InitializeCriticalSection или же InitializeCriticalSectionAndSpinCount инициализировать объект.
Я бы посоветовал сначала обратиться к документации в таких случаях.