Существует странная функция, как макрос в файле заголовка winbase.h
в строке 97 следующим образом:Что такое функциональный макрос Yield() в winbase.h (строка 97)?
#define Yield()
Для чего это?
Существует странная функция, как макрос в файле заголовка winbase.h
в строке 97 следующим образом:Что такое функциональный макрос Yield() в winbase.h (строка 97)?
#define Yield()
Для чего это?
Windows 3.x б/у кооперативный многозадачность модель. Все приложения (также называемые «задачи»), используемые для работы в одном и том же пространстве памяти в одном потоке. Обычно переключение между задачами выполнялось с помощью GetMessage
API в главном контуре сообщения приложения. Yield()
использовался для добровольного переключения на другое приложение (например, при длительной обработке с использованием ЦП). Вот related MSKB article, который до сих пор сохранился.
Конечно, Yield()
API, как это не имеет смысла, с современной многопоточной архитектурой многопроцессорных ОС. Итак, Microsoft заменила его пустым макросом, пытаясь добиться совместимости кода на уровне компиляции.
Любопытно, что в некоторой форме Yield()
был reincarnated в .NET 4.5. Его цель - отложить продолжение асинхронного метода на текущем SynchronizationContext (или в потоке пула, если нет контекста синхронизации). Интересная часть этого заключается в том, что использование Task.Yield()
в основном потоке пользовательского интерфейса приложения .NET фактически позволяет организовать аналогичный уровень совместной многозадачности, предлагаемый Windows 3.x.
Реальная проблема: у меня есть функция-член с именем Yield, теперь я не могу использовать это имя, потому что оно определено как злой макрос. Мне очень нравится имя для его точного значения в моем классе. Как решить эту проблему? Благодарю. – xmllmx
Просто выполните '#undef Yield' в своем' stdafx.h', после 'windows.h', но перед любыми вашими входящими файлами. – Noseratio
Есть ли способ определить макрос через опцию компилятора? Например, -DName = 1 может определить макрос; Есть ли способ определить неопределенность? – xmllmx
Вы можете открыть эти файлы заголовков и посмотреть, почему DBG не определен. Вероятно, это обернуто вокруг другого определения, которое оценивается как false. –