Ошибка при вызове EnterCriticalSection

Я пытаюсь создать почтовый ящик на ОС 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

Пожалуйста, дайте мне знать, если требуется дополнительная информация …

0

Решение

Так что я нашел решение, если бы у кого-то была такая же проблема.

Оказывается, вам нужно инициализировать критический раздел, прежде чем использовать его. Таким образом, следующее исправило это:

InitializeCriticalSection(&csMailboxLock);

Это ссылка, которая помогла мне:
https://sites.google.com/site/jeff00coder00seattle/home/coding/cpp-coding/c-win32-critical-section-example

1

Другие решения

«Сообщение об ошибке» не является сообщением об ошибке, оно просто указывает, что источник для текущего местоположения счетчика программы (внутри вызова ОС) недоступен.

документация за EnterCriticalSection довольно ясно:

Перед использованием критического раздела, какой-то поток процесса должен вызвать InitializeCriticalSection или же InitializeCriticalSectionAndSpinCount инициализировать объект.

Я бы посоветовал сначала обратиться к документации в таких случаях.

1

По вопросам рекламы [email protected]