Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 200 201 202 [ 203 ] 204 205 206 ... 210


} end case

deal with other error cases default:

throw Exception( 4 );

} end switch } end if

return realCount;

---------------------------------------------------void fastcall TComPort::SetBaudRate(int b)

GetCommState(hCom, &dcbBuf);

dcbBuf.BaudRate = b;

SetCommState(hCom, &dcbBuf);

----------------------------------------------------DWORD fastcall TComPort::ClearError(void)

COMSTAT stCom; DWORD ierr;

ClearCommError(hCom,&ierr,&stCom); return ierr;

Как отследить запуск второй копии приложения?

1. Воспользоваться функцией FindWindow(). Ее

использование затруднительно если меняется заголовок окна или есть другое окно с таким же заголовком и классом окна.

2. Воспользоваться RxLib-овской функцией ActivatePrevInstance, которая в конце-концов тоже использует эту функцию. Однако ActivatePrevInstance так же выполняет некоторые полезные действия (активизация предыдущей копии приложения).



3. Можно создавать семафоры, мутексы, но тогда при некорректном завершении программы, ты ее больше не запустишь.

Пример использования мутекса:

HANDLE hMutex=CreateMutex(NULL, FALSE, YourMutexName ); if(GetlastError()==ERROR ALREADY EXISTS )

здесь надо бы активизировать предыдущую копию приложения. как это сделать, см. ActivatePrevInstance().

else

try {

Application->Initialize();

Application->CreateForm( classid(TForm1), &Form1);

Application->Run();

catch (Exception &exception)

Application->ShowException(&exception);

CloseHandle(hMutex);

4. Можно получить имя исполняемого файла для каждого из запущенных процессов, после чего сравнить его с именем .exe вашего процесса... Недостатки способа:

а) Две копии приложения могут быть запущены из разнгх

мест.

б) Различные методы получения списков запущенных процессов дя 9x и NT.

Пример для 9x:

#include <tlhelp32.h> #include <dos.h>

USERES( Project1.res ); USEFORM( Unit1.cpp , Form1);

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

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)



HANDLE hSnapshot=CreateToolhelp32Snapshot

(TH32CS SNAPPROCESS, 0);

PROCESSENTRY32 pe; pe.dwSize=sizeof(pe); bool Running=false;

DWORD CurrentProc=GetCurrentProcessId();

if(Process32First(hSnapshot, &pe))

do {

if(CurrentProc!=pe.th32ProcessID && strcmpi(pe.szExeFile, argv[0])==0)

Running=true; break;

}while(Process32Next(hSnapshot, &pe));

CloseHandle(hSnapshot);

if(Running) return 1;

try {

Application->Initialize();

......

5. Использовать временный файл:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

HANDLE hFile = CreateFile( c:\\tempfile.tmp , GENERIC WRITE, 0,

NULL, CREATE ALWAYS,

FILE ATTRIBUTE NORMAL FILE FLAG DELETE ON CLOSE,

NULL);

if(hFile == INVALID HANDLE VALUE) return 1;

try {

Application->Initialize();



1 ... 200 201 202 [ 203 ] 204 205 206 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика