Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Топик дурацких вопросов / 25 сообщений из 28, страница 1 из 2
11.11.2016, 14:51
    #39345663
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Вопрос 1: Как проверить наличие мьютекса, не увеличивая количество его пользователей
Код: pascal
1.
2.
3.
4.
5.
function IsMutexExists(const aMutexName : string): Boolean;
begin
  CloseHandle(OpenMutex(MUTEX_ALL_ACCESS,false,PChar(aMutexName)));
  Result := GetLastError = ERROR_SUCCESS;
end;



- очень криво?
...
Рейтинг: 0 / 0
11.11.2016, 15:01
    #39345678
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Так ты же тут увеличиваешь кол-во пользователей? Не?
...
Рейтинг: 0 / 0
11.11.2016, 15:05
    #39345683
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
можно попробовать DuplicateHandle() с параметром DUPLICATE_CLOSE_SOURCE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.11.2016, 15:06
    #39345684
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
попробовать его создать?
...
Рейтинг: 0 / 0
11.11.2016, 15:24
    #39345713
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Barmaley57Так ты же тут увеличиваешь кол-во пользователей? Не?
Ну, я же и уменьшаю, не?
...
Рейтинг: 0 / 0
11.11.2016, 15:25
    #39345717
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Ariochпопробовать его создать?
Не, страшно. А вдруг создастся?

Нужно проверить наличие. Если нет - не создавать. Если есть - тем более не создавать.
...
Рейтинг: 0 / 0
11.11.2016, 15:27
    #39345722
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Мимопроходящийможно попробовать DuplicateHandle() с параметром DUPLICATE_CLOSE_SOURCE

Э... а исходный хэндл - где взять?

Нужно по имени проверять. :)
...
Рейтинг: 0 / 0
11.11.2016, 16:20
    #39345782
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
чччДНе, страшно. А вдруг создастся?

удалишь
...
Рейтинг: 0 / 0
11.11.2016, 16:22
    #39345784
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
AriochчччДНе, страшно. А вдруг создастся?

удалишь
если не создавать, то и удалять не придётся.
...
Рейтинг: 0 / 0
11.11.2016, 16:30
    #39345790
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
запускаем SysInternal WinObj
заходим в папки \, \KernelObjects, \BAseNAmedObjects
сортируем объекты по типу
находим тип "Mutant"
и просматриваем имена объектов данного типа

https://technet.microsoft.com/en-us/sysinternals/winobj
https://en.wikipedia.org/wiki/Object_Manager_(Windows)

------------

я другого не пойму, на кой черт тебе это надо?

ну допустим пошарилд ты по углам, убедился что вот-прямо-сейчас такого мьютекса нет

и что тебе это даст?
может быть прямо в эту саму секунду параллельные процесс его создает и вот-вот закончит создание.
...
Рейтинг: 0 / 0
11.11.2016, 17:45
    #39345848
Вот-вот
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Arioch, +1
А может такое случиться, что вот есть мутекс.
Но еще буквально через пару тактов процессора его уже и нет?
...
Рейтинг: 0 / 0
11.11.2016, 18:17
    #39345881
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Вот-вотArioch, +1
А может такое случиться, что вот есть мутекс.
Но еще буквально через пару тактов процессора его уже и нет?

Я ж не борюсь за ресурсы.
Мне просто любопытно. :)
...
Рейтинг: 0 / 0
11.11.2016, 18:47
    #39345897
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
чччД,

If the mutex is a named mutex and the object existed before this function call, the return value is a handle to the existing object, GetLastError returns ERROR_ALREADY_EXISTS, bInitialOwner is ignored, and the calling thread is not granted ownership. However, if the caller has limited access rights, the function will fail with ERROR_ACCESS_DENIED and the caller should use the OpenMutex function.
...
Рейтинг: 0 / 0
11.11.2016, 19:06
    #39345903
Товарищ младший сержант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
ZeliusчччД,

If the mutex is a named mutex and the object existed before this function call, the return value is a handle to the existing object, GetLastError returns ERROR_ALREADY_EXISTS, bInitialOwner is ignored, and the calling thread is not granted ownership. However, if the caller has limited access rights, the function will fail with ERROR_ACCESS_DENIED and the caller should use the OpenMutex function.
И чё? :)
...
Рейтинг: 0 / 0
29.11.2016, 21:12
    #39357304
Товарищ младший сержант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
чччД Вопрос 1: Как проверить наличие мьютекса, не увеличивая количество его пользователей
Код: pascal
1.
2.
3.
4.
5.
function IsMutexExists(const aMutexName : string): Boolean;
begin
  CloseHandle(OpenMutex(MUTEX_ALL_ACCESS,false,PChar(aMutexName)));
  Result := GetLastError = ERROR_SUCCESS;
end;



- очень криво?
Очень. При несброшенном значении LastError, в случае, когда мьютекс существует и доступен, GetLastError вернет это самое старое значение.

Вот так получше:
Код: pascal
1.
2.
3.
4.
function IsMutexAccesible(const aMutexName: string): Boolean;
begin
 Result := CloseHandle(OpenMutex(MUTEX_ALL_ACCESS, false, PChar(aMutexName)));
end;
...
Рейтинг: 0 / 0
12.06.2017, 19:02
    #39470584
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Вопрос №2: Сия функция -

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function zclock_time(): Int64;
var
  fFT: TFileTime;
  fULI: ULARGE_INTEGER;
begin
  GetSystemTimeAsFileTime(fFT);
  CopyMemory(@fULI, @fFT, SizeOf(ULARGE_INTEGER));
  Result := fULI.QuadPart div Int64(10000);
end;



- не вызывает ли дурацких вопросов?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
18.03.2021, 11:49
    #40054874
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Что-то торможу.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
type
  TIntegers = array of Integer;
  pIntegers = ^TIntegers;

var
  fpI : pIntegers;
begin

  New(fPI);
  SetLength(fPI^, 3);
  fPI^[0] := 1;
  fPI^[1] := 2;
  fPI^[2] := 3;


Вопрос: как освободить память?
...
Рейтинг: 0 / 0
18.03.2021, 11:56
    #40054876
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Точно торможу. :)
Вот так надо:
ъъъъъ

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
type
  TIntegers = array of Integer;
  pIntegers = ^TIntegers;

var
  fpI : pIntegers;
begin

  New(fPI);
  SetLength(fPI^, 3);
  fPI^[0] := 1;
  fPI^[1] := 2;
  fPI^[2] := 3;

  fPI^ := nil;
  FreeMemory(fPI);



...
Рейтинг: 0 / 0
18.03.2021, 11:56
    #40054877
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
ъъъъъ,

Dispose(fPI) должно хватить, по идее. Ну SetLength(fPI^, 0) перед этим, если хочется сверхнадёжности.
...
Рейтинг: 0 / 0
18.03.2021, 11:57
    #40054878
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
softwarer,

точно, спасибо!
...
Рейтинг: 0 / 0
18.03.2021, 11:58
    #40054881
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
ъъъъъ
Вот так надо:

Я бы не стал ломать пары New/Dispose и GetMem/FreeMem. Технически оно, конечно, можно, но кроме дополнительных проблем ничего не даст.
...
Рейтинг: 0 / 0
18.03.2021, 11:58
    #40054882
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
...спать надо больше.
...
Рейтинг: 0 / 0
21.01.2022, 20:42
    #40128593
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
Как увеличить скорость считывания структуры каталогов?

Считывание данных о 1000 (одна тысяча) файлов занимает примерно 1 секунду. Повторное сканирование той же структуры занимает всё равно 1 секунду.
Используются методы Windows: FindFirstFile() - {FindNextFile()} - FindClose(). Ну или методы для рекурсивного вспомогательных библиотек, в которых все равно используются FindFirstFile() - {FindNextFile()} - FindClose()...

1 секунда на 1000 файлов - это долго.
...
Рейтинг: 0 / 0
21.01.2022, 20:48
    #40128594
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
ъъъъъ,

обойтись без повторного считывания? ReadDirectoryChangesW?
...
Рейтинг: 0 / 0
21.01.2022, 20:52
    #40128598
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик дурацких вопросов
softwarer
...ReadDirectoryChangesW?

Блин, так не хочется.
А придется, наверное.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Топик дурацких вопросов / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]