signed char
имеет диапазон-128 к 127; unsigned char
имеет диапазон от 0 до 255.
char
будет эквивалентно или символу со знаком или неподписанному символу, в зависимости от компилятора, но отличный тип.
при использовании строк C-стиля, просто используйте char
. Если необходимо использовать символы для (довольно редкой) арифметики, определите подписанный или неподписанный явно для мобильности.
MessageBox ()
и аналогичные функции Windows API не блокируют выполнение, в отличие от операций ввода-вывода или мьютекса. Функция MessageBox ()
создает диалоговое окно, обычно с кнопкой OK, поэтому вы ожидаете автоматической обработки сообщений Windows, связанных с окном сообщения. Это реализовано с помощью собственного цикла сообщений - новый поток не создается, но ваше приложение остается отзывчивым, потому что выбранные сообщения, такие как Paint, обрабатываются рекурсивно, вызывая вашу функцию WndProc ()
, а некоторые сообщения не передаются, из-за модального типа созданного окна.
Sleep () и другие функции, вызываемые непосредственно из вашего WndProc ()
, обрабатывающего сообщение Windows,
MessageBox запускает собственный цикл сообщений Win32 (чтобы не замораживать вызывающее приложение).
Остерегайтесь использовать его в функциях без повторного входа ...
РЕДАКТИРОВАТЬ: для уточнения: Цикл сообщений в окнах выглядит примерно так (украдено из msdn):
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
DispatchMessage будет вызывать любую оконную процедуру, которая ему нужна. Этот процесс окна может начать свой собственный цикл (в том же потоке), и он сам вызовет DispatchMessage, который будет вызывать любые обработчики сообщений.
Если вы хотите его увидеть, запустите приложение в отладчике, откройте окно сообщения и сломать. Вы попадете куда-нибудь в его петлю. Посмотрите на стек вызовов и посмотрите, сможете ли вы найти родительский цикл.