Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 dw := WaitForSingleObject(g_hAppMutex, 0);

 Result := (dw <> WAIT_TIMEOUT);

 ReleaseMutex(g_hAppCritSecMutex); // необязательно вследствие последующего закрытия

 CloseHandle(g_hAppCritSecMutex);

end;

initialization

 g_hAppMutex := 0;

finalization

 if LongBool(g_hAppMutex) then begin

ReleaseMutex(g_hAppMutex); //
необязательно

CloseHandle(g_hAppMutex);

 end;

end.

Как не допустить запуск второй копии программы XI

Михаил Чумак рекомендует следующий код:

Есть такая штука Atom (см. Help).

program SelfCheck;

uses

 Windows,Forms,Unit1 in 'Unit1.pas' {Form1};

const

 AtStr='MyProgram';

function CheckThis : boolean;

var

 Atom: THandle;

begin

 Atom:= GlobalFindAtom(AtStr);

 Result:= Atom <> 0;

 if not result then GlobalAddAtom(AtStr);

end;

begin

 if not CheckThis then begin

 // Запуск программмы

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

GlobalDeleteAtom(GlobalFindAtom(AtStr));

// !!!

 end

 else begin

MessageBox(0,'Нельзя запустить две копии','Моя программа',0);

 end;

end.

Элегантно и работает однозначно. Спасибо Славе Шубину.

Как не допустить запуск второй копии программы XII

Nomadic рекомендует следующее:

A: Воспользуйтесь функцией ActivatePrevInstance из библиотеки rxLib. Для завершения второго экземпляра используйте Application.Terminate.

(AS): Другой

вариант: X:\DELPHI2\DEMOS\IPCDEMOS\ipcthrd.pas, функция IsMonitorRunning.

Как правильно завершить некое приложение?

Nomadic рекомендует следующий код:

Если не принудительно, то можно послать на его Instance сообщение WM_QUIT. Если же необходимо принудительно терминировать приложение, то смотрите ниже — под Windows NT процесс можно терминировать через специально предназначенный для этого хэндл. Иначе гарантии нет. Предположим, что процесс создаем мы, ожидая его завершения в течение maxworktime. Тогда —

var

 dwResult: Longint; // This example was converted from C source.

begin

// Not tested. Some 'nil' assignments must be applied

 // as zero assignments in Pascal. Some vars need to

 // be declared (maxworktime, si, pi). AA.

 if CreateProcess(nil, CmdStr, nil, nil, FALSE,CREATE_NEW_CONSOLE, nil, nil, si, pi) then begin

CloseHandle(pi.hThread);

dwResult := WaitForSingleObject(pi.hProcess, maxworktime*1000*60);

CloseHandle(pi.hProcess);

if dwResult <> WAIT_OBJECT_0 then begin

pi.hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, pi.dwProcessId);

if pi.hProcess <> nil then begin

TerminateProcess(pi.hProcess, 0);

CloseHandle(pi.hProcess);

end;

end;

 end;

end;

Как отчитывать промежутки времени с точностью, большей чем 60 мсек?

Nomadic рекомендует следующий код:

Для начала описываешь процедуру, которая будет вызываться по сообщению от таймера :

procedure FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD); stdcall;

begin

 //// Тело процедуры.

end;

а дальше в программе (например по нажатию кнопки) создаешь Таймер и вешаешь на него созданную процедуру

 uTimerID:=timeSetEvent(10, 500, @FNTimeCallBack, 100, TIME_PERIODIC);

Подробности смотри в Help. Hу и в конце убиваешь таймер

timeKillEvent(uTimerID);

И все. Точность этого способа до 1 мсек. минимальный интервал времени можно задавать 1 мсек.

Поделиться:
Популярные книги

Генерал Империи

Ланцов Михаил Алексеевич
4. Безумный Макс
Фантастика:
альтернативная история
5.62
рейтинг книги
Генерал Империи

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3

Шипучка для Сухого

Зайцева Мария
Любовные романы:
современные любовные романы
8.29
рейтинг книги
Шипучка для Сухого

Метатель. Книга 2

Тарасов Ник
2. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 2

Отмороженный 5.0

Гарцевич Евгений Александрович
5. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 5.0

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Огненный князь 6

Машуков Тимур
6. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 6

Ваше Сиятельство 5

Моури Эрли
5. Ваше Сиятельство
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Ваше Сиятельство 5

"Фантастика 2024-5". Компиляция. Книги 1-25

Лоскутов Александр Александрович
Фантастика 2024. Компиляция
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Фантастика 2024-5. Компиляция. Книги 1-25

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи