Инициализируйте Критический Раздел только однажды для процесса

Если я понимаю вашу цель: Для строки (ей), где parkingslotid = 1 - Обновите status до «В наличии», но только если status в настоящее время не установлено, это может помочь:

<?php

session_start();
include "includes/connection.php";

$connection->prepare("UPDATE `parkingslot` SET `status`=? WHERE `parkingslotid`=? AND (`status` IS NULL OR `status`=?)");

$connection->bind_param("sis", $status, $parkingslotid, $empty_str);

$status = 'Avail';
$parkingslotid = 1;
$empty_str = '';

$connection->execute(); 

echo $connection->affected_rows.' rows affected';

$connection->close();

?>

Это экономит часть обработки, не проверяя сначала PHP.

6
задан atVelu 7 April 2009 в 07:59
поделиться

5 ответов

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

Существует несколько общих оберток для CRITICAL_SECTION, который можно использовать. CCriticalSection MFC является очевидным выбором, но можно создать собственное также.

3
ответ дан 10 December 2019 в 02:53
поделиться

В Windows Vista вы можете использовать функции одноразовой инициализации. Использование одноразовой инициализации показывает, как их использовать, чтобы убедиться, что событие инициализируется только один раз.

5
ответ дан 10 December 2019 в 02:53
поделиться

Уверенный существуют много много путей.

  1. Используйте глобальную переменную
  2. Используйте одноэлементный экземпляр
  3. Создайте его в основном или некоторой другой единственной функции экземпляра
  4. Создайте его как членский var некоторого единственного экземпляра класса экземпляра

и так далее. Это не отличается от любого другого вопроса попытки создать единственный экземпляр некоторой вещи в Вашем коде.

1
ответ дан 10 December 2019 в 02:53
поделиться

Можно также использовать класс обертки и объявить глобальный объект того класса. Конструктор глобального объекта будет вызван только однажды при запуске.

0
ответ дан 10 December 2019 в 02:53
поделиться

Вы можете инициализировать глобальный критический раздел в DllMain для DLL_PROCESS_ATTACH ( и очистить для DLL_PROCESS_DETACH ).

0
ответ дан 10 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

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