Вы правы, полагая, что <>
означает «не равно». Что вы упускаете, так это то, что NULL
ничего не равно, а также не равно ничему (даже другим значениям NULL
). Любое сравнение на равенство с NULL
на самом деле оценивается как «Неизвестный», который не совпадает с «Истина» или «Ложь».
NULL = '?' -- evaluates to Unknown
NULL <> '?' -- evaluates to Unknown
NULL = NULL -- evaluates to Unknown
NULL <> NULL -- evaluates to Unknown
Если вы хотите включить NULL
записей в свой результат, вам нужно сравнить, используя IS NULL
. Измените свои заявления на это:
AND (Address1 <> '?' OR Address1 IS NULL)
AND (Address2 <> '?' OR Address2 IS NULL)
AND (Address3 <> '?' OR Address3 IS NULL)
Что Вы реализуете, вот по существу msleep_interruptible () (linux/kernel/timer.c)
/**
* msleep_interruptible - sleep waiting for signals
* @msecs: Time in milliseconds to sleep for
*/
unsigned long msleep_interruptible(unsigned int msecs)
Эта функция имеет преимущество, что спецификация находится в миллисекундах и скрывает детали мига, переносящегося внутренне. Обязательно проверьте возвращаемые значения, поскольку этот вызов возвращает количество остающегося мига. Нуль означает, что вызов спал конкретное количество миллисекунд, в то время как ненулевое значение указывает, что вызов был прерван это много мига рано.
Относительно обертывания посмотрите раздел 6.2.1.2 для описания мига и обертывания. Кроме того, это сообщение пытается описать обертывание в краткий обзор.