Delphi имеет какой-либо эквивалент C энергозависимой переменной?

Если вы не используете какой-либо фреймворк, поддерживающий связывание, вам следует прослушивать входные события и обновлять скрытый входной сигнал на основе этого.

Это функция, которая может дать вам идею:

let realInput = document.getElementById('real-input');
let userInput = document.getElementById('user-input');
userInput.addEventListener('input', function(value) {
  const inputValue = value.target.value;
  realInput.value = inputValue; // update the hidden input
  const userInputResult = inputValue.match(/\[[^\[]*\]/); // the regex for [numberic_id]
  if (userInputResult) {
    userInput.value = inputValue.substring(0, [userInputResult.index - 1]); // -1 is to remove the space between the 'string' and the '[numeric_id]'
  }
});
13
задан Barry Kelly 24 October 2008 в 01:28
поделиться

4 ответа

Короткий ответ: нет.

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

При чтении перекрестного потока видимое местоположение сохраните его значение к локальному прежде, чем сделать дальнейшее управление; точно так же ограничьте записи однократным присвоением.

Компилятор Delphi не выполняет общее устранение подвыражения (CSE) по нелокальным выражениям местоположения, когда существуют вызовы к невстроенным методам между выражениями, поскольку компилятор не делает межпроцедурной оптимизации, и таким образом это не было бы корректно даже для однопоточного кода.

Так, можно хотеть использовать InterlockedExchange (), чтобы сделать чтения и записи для принуждения этого; дополнительно, это вызовет полный барьер памяти, таким образом, процессор не переупорядочит чтения и пишет также.

15
ответ дан 1 December 2019 в 21:25
поделиться

Я не знаю ни о каком эквиваленте, и при этом я не думаю, что абсолютная директива поможет Вам. абсолютный позволяет Вам иметь две переменные, которые используют тот же адрес, но я не думаю, что он будет препятствовать тому, чтобы компилятор оптимизировал ссылки на ту память.

Я предполагаю, что Вы могли использовать указатель и управлять им сами. Тот путь вообще компилятор делает до оптимизации retrival значения указателя, это не должно предполагать, что значение, сохраненное в адресе, совпадает с в прошлый раз, когда это считало его, но это - чистое предположение.

1
ответ дан 1 December 2019 в 21:25
поделиться

Delphi для .NET не имеет ключевого слова также, но платформа .NET имеет функции util для него. Посмотрите Поток. VolatileRead и Поток. VolatileWrite.

1
ответ дан 1 December 2019 в 21:25
поделиться

Использование динамично выделило указатели?

var
  MyVarPtr: ^integer;
begin
  New(MyVarPtr);
  MyVarPtr^ := 5;
...

Это должно помешать компилятору использовать регистр для целочисленного значения (но это могло бы все еще использовать один для адреса). Я не уверен, как это выдерживает сравнение с энергозависимым, все же.

0
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: