Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
В Windows асинхронные операции сделаны операцией файла, не дескриптором. Существует несколько способов ожидать на операциях файла для завершения асинхронно.
, Например, если Вы хотите знать, когда данные доступны на сетевом сокете, выпустите асинхронный запрос чтения на сокете и когда это завершается, данные были доступны и были получены.
В Win32, асинхронные операции используют OVERLAPPED
структура для содержания состояния о выдающейся операции IO.
WaitForMultipleObjects
для ожидания на всех событиях сразу. Это имеет недостаток только способности ожидать на MAXIMUM_WAIT_OBJECTS
объекты сразу (64). Можно также ожидать на других типах событий одновременно (завершение процесса/потока, взаимные исключения, события, семафоры) ReadFileEx
и WriteFileEx
для организации очередей Асинхронные Вызовы процедуры (APCs) к вызывающему потоку и SleepEx
(или WaitFor{Single|Multiple}ObjectsEx
) с Alertable TRUE
для получения уведомления для каждой операции, когда это завершается. Этот метод подобен порту завершения IO, но только работает на один поток. ядро Windows NT не делает различия между сокетом, дисковым файлом, каналом, и т.д. операции файла внутренне: все эти опции будут работать со всеми типами файлов.
Еще нет того, насколько я знаю. Друг и я работаем над Windows с открытым исходным кодом epoll реализация (ссылка ниже), но мы сталкиваемся с проблемами, выясняющими, как заставить его действовать то же как реализация Linux.
Текущие препятствия:
я попытаюсь возвратиться и обновить это сообщение, поскольку мы делаем успехи с проектом.