2014-09-22 4 views
0

Я пытаюсь создать почтовый ящик на ОС Windows 7 в Eclipse IDE и в режиме отладки. Я пытаюсь создать RTOS (операционную систему реального времени), такую ​​как почтовый ящик в Windows, используя Eclipse.Ошибка при вызове 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

Сообщение об ошибке в тексте: Нет источника доступного для NTDLL TpCallbackMayRunLong() в 0x77d78e19

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

+1

«picture» вашего сообщения об ошибке не читается. Сообщение об ошибке - это простой текст - что тяжело сделать для копирования и вставки его в виде текста непосредственно в вопрос? – Clifford

+0

Его нечитаемый на моем ПК, и я уже отвечал на такие вопросы. Я поставил картину, потому что я думал, что она будет показывать больше деталей и будет более понятной. Вот почему вы проголосовали за мой вопрос? Вы даже посмотрели вниз, чтобы найти, что я нашел решение? Если вы не можете помочь, по крайней мере, не будьте злыми по уважительной причине. – Algorithmic

+0

Я не уверен, как сообщить вам, что важная информация в вашем вопросе не читается, - это «быть средним». Вы правы, однако; если я установил Zoom в моем браузере на 250%, это разборчиво! Возможно, вы уменьшили размер окна, чтобы уменьшить избыточное пространство, но я предлагаю, чтобы текстовые сообщения все же лучше всего отображались как текст. Читаемость может объяснить, почему вы должны сами ответить на вопрос. – Clifford

ответ

1

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

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

InitializeCriticalSection(&csMailboxLock); 

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

+0

Обратите внимание, что вы можете пометить свой собственный ответ как * ответ *. – Clifford

1

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

documentation для EnterCriticalSection довольно ясно:

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

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

Смежные вопросы