Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 367
от 04.10.2003, 08:00

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1109
Отправлено ответов: 2541
Активность: 229.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Извращенок
Статус: Профессиональный
Общий рейтинг: 148.95
URL: Новосибирск
Телефон: (3832) 329836
[Подробней >>]
Bobs
Статус: Профессиональный
Общий рейтинг: 122.03
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 106.89
URL: Savage Metal Club - жизнь в стиле рок-н-ролл
Телефон: +7 901 710 3146
[Подробней >>]
 
Yuri Gordienko
Статус: Профессиональный
Общий рейтинг: 118.89
URL: Досконально о С++, оптимизация программ, советы
[Подробней >>]
Eugene
Статус: Профессиональный
Общий рейтинг: 106.29
URL: мощный файловый архив
[Подробней >>]
BOLT
Статус: Профессиональный
Общий рейтинг: 170.96
URL: Начинающему программитсу: софт, примеры, документация, Assembler, C & C++.
Телефон: Три раза АУ!
[Подробней >>]
 
Marouder
Статус: Профессиональный
Общий рейтинг: 122.88
URL: Первый Хабаровский Форум
Телефон: (4212) 21-93-65
[Подробней >>]
Vdr
Статус: Опытный
Общий рейтинг: 110.4
[Подробней >>]
Avl2k
Статус: Профессиональный
Общий рейтинг: 125.3
[Подробней >>]
 
Dzik
Статус: Профессиональный
Общий рейтинг: 111.32
URL: Разработка игрушек
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1093. Здравствуйте, коллеги. Это не вопрос, а так, хочется узнать, кому какой способ предотвращения запуск... (ответов: 6)
Вопрос № 1094. Здравсвуйте. Почему следующая конструкция компилируется, но работает некорректно: if (1... (ответов: 6)
Вопрос № 1095. Добрый вечер. Как можно узнать точное время работы программы. (чтобы потом можно было сравнить неско... (ответов: 3)
Вопрос № 1096. Доброго времени суток. Почему не копируется файл? (Borland C++ 5.02)... (ответов: 1)

Вопросов: 4, ответов: 16


 Вопрос № 1093

Здравствуйте, коллеги. Это не вопрос, а так, хочется узнать, кому какой способ предотвращения запуска второго экземпляра приложения больше нравится: поиск окна, с помощью Mutex'а или с помощью разделяемой секции?
По мне, лучше всего третий вариант. Вот я и не могу понять, ПОЧЕМУ большинству нравится второй? Почти везде он описан.
Третий ведь намного проще. Пишешь:
#pragma data_seg("Shared")
bool Started=FALSE;
#pragma data_seg()
#pragma comment(linker, "/Section:Shared,rws")
Потом в начало WinMain вставляешь:
if (Started) {
MessageBox(NULL,"Program is Already Running!","Error",MB_ICONERROR);
return 0;
}
А чуть дальше вставляешь Started=TRUE;
И все. Помойму, лучше способа нет. И объекты ядра зря не создаются, и окно проги можно переименовывать, и все ясно и понятно.
Правда, непонятно, можно ли в Борландовских продуктах этот способ использовать, но зато в VC и MASM32 точно можно.
А вам какой способ больше нравится?



Вопрос отправлен: 30.09.2003, 12:37
Отправитель: Marouder

[Следующий вопрос >>] [Список вопросов]

Отвечает Извращенок

Добрый день, Marouder!
А мне лично пофиг. Обычно я нее праю мозги и ищу определенный процесс.

Ответ отправлен: 30.09.2003, 15:22
Отправитель: Извращенок


Отвечает Bobs

Доброе время суток, Marouder!
Есть ещё способ с созданием в корне диска файла с аттрибутами system+hidden+FILE_FLAG_DELETE_ON_CLOSE. Это работает точно везде и всюду (писалось и на бейсике, и на двух вариантов C++) и имеет преимущества перед, например, 2ым вариантом (если программа вылетит, mutex никуда не денется до перезагрузки системы, а файл просто удалится.)

Ответ отправлен: 30.09.2003, 15:17
Отправитель: Bobs


Отвечает Gibbel

Приветствую Вас, Marouder!
Приведенный вами метод не дает 100% гарантии, что второй экземпляр не будет запущен. Ведь между проверкой флага Started и его установкой пройдет несколько тактов, в которые Windows может передать управление другой копии программы, которая, в свою очередь, также проверит флаг Started, и убедиться, что она единственная в своем роде. Если все-таки вам не терпиться применить данный метод, то я прибегнул бы к использованию языка Assembler. Тогда проверка выглядела бы так:
mov eax,1
xchg dword ptr [Started],eax
cmp eax,1
А все таки, с Mutex'ами надежнее - есть 100% гарантия, что будет работать и на многопроцессорной системе.

Ответ отправлен: 30.09.2003, 14:14
Отправитель: Gibbel


Отвечает Yuri Gordienko

Здравствуйте, Marouder!
Для случая проверки наличия программы разделяемые секции проще и удобнее, но ведь Mutex'ы скорее предназначены для многопоточного программирования, где такая тема не катит.
Успехов


Ответ отправлен: 30.09.2003, 12:54
Отправитель: Yuri Gordienko


Отвечает Eugene

Здравствуйте, Marouder!
На борландовских продуктах 3-й способ мне не удалось осуществить. А 1-й и 2-й мне не нравятся. Гораздо удобнее на мой взгляд создание временного файла. А вся процедура не намного сложнее 3-го способа. В начале надо только создать файл и всё:
char *lpTempName = new char[256];
GetTempPath(256, lpTempName);
StrCat(lpTempName, "prog_start.tmp");
HWND hFile = CreateFile(lpTempName,
GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_HIDDEN | FILE_FLAG_DELETE_ON_CLOSE,
NULL);
delete[]lpTempName;
if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Program is Already Running!","Error",MB_ICONERROR);
return 1;
}
Этот файл в программе даже закрывать не надо.

Ответ отправлен: 30.09.2003, 17:03
Отправитель: Eugene


Отвечает BOLT

Приветствую Вас, Marouder!
Неплохо! А спорить какой способ лучше: использовать mutex или твой я не берусь спорить, т.к. какой способ быстрее по времени выполнения, я не знаю.

Да прибудет с тобой Великая Сила!
This message was created by EMan 1.5


Ответ отправлен: 30.09.2003, 17:19
Отправитель: BOLT


 Вопрос № 1094

Здравсвуйте.
Почему следующая конструкция компилируется, но работает некорректно:
if (1Наверное, компилятор сначала сравнивает х с 1, после этого
присваивает выражению значение 1 или 0, а потом сравнивает
полученное значение с 8? Я прав?
И будет ли правильно: if ( (1Заранее спасибо.



Вопрос отправлен: 30.09.2003, 15:05
Отправитель: Yad

[Следующий вопрос >>] [Список вопросов]

Отвечает Marouder

Здравствуйте, Yad!
Тебя глючит что-ли?
Че это такое: "if(1"?
И причем здесь 8?

Ответ отправлен: 01.10.2003, 11:42
Отправитель: Marouder


Отвечает Yuri Gordienko

Приветствую Вас, Yad!
Примеры пиши или используя html или пиши в окне Приложение,
т.к. все твои примеры порубаны
Успехов

Ответ отправлен: 30.09.2003, 15:25
Отправитель: Yuri Gordienko


Отвечает Vdr

Доброе время суток, Yad!
Наверное прав... но где конструкция?
Удачи!

Ответ отправлен: 01.10.2003, 10:45
Отправитель: Vdr


Отвечает Avl2k

Приветствую Вас, Yad!
Условие съедено парсером, как и в вопросе #1092. Выхода два:
повторить его, поместив условие в приложение (ну или заэкранировать), либо дождавшись, пока RusFaq перестанет воспринимать знаки < как начало тега :)
С уважением, Avl2k.

Ответ отправлен: 30.09.2003, 15:47
Отправитель: Avl2k


Отвечает BOLT

Приветствую Вас, Yad!
Я непонимаю! Ты можешь нормально написать!
> if (1
Что это такое?
> if ( (1
А это?

Да прибудет с тобой Великая Сила!
This message was created by EMan 1.5


Ответ отправлен: 30.09.2003, 17:19
Отправитель: BOLT


Отвечает Dzik

Здравствуйте, Yad!
Ну раз еще никто толком не ответил, отвечу я.
Конечно же правильно писать как во втором случае, т.е. разбив на два условия, почему компилятор пропускает 1<x<8 я не знаю, но по идее он должен выдавать ошибку.

Ответ отправлен: 30.09.2003, 19:02
Отправитель: Dzik


 Вопрос № 1095

Добрый вечер.
Как можно узнать точное время работы программы.
(чтобы потом можно было сравнить несколько программ по времени их работы)
Спасибо.



Вопрос отправлен: 30.09.2003, 18:32
Отправитель: Yad

[Следующий вопрос >>] [Список вопросов]

Отвечает Извращенок

Здравствуйте, Yad!
Хе. Для этого нужно писать отдельную прогу, которая фиксировала бы это самое время. А по-правде, точное время можно вычислить математически, только это очень-очень сложно.

Ответ отправлен: 01.10.2003, 10:58
Отправитель: Извращенок


Отвечает BOLT

Здравствуйте, Yad!
В начале программы запрашиваешь системное время. В конце тоже. Потом отнимаешь конечное от начального. Вот и все.

Да прибудет с тобой Великая Сила!
This message was created by EMan 1.5


Ответ отправлен: 30.09.2003, 20:10
Отправитель: BOLT


Отвечает Bobs

Приветствую Вас, Yad!
Воспользуйтесь Intel VTune Perfomance Analyzer

Ответ отправлен: 30.09.2003, 21:03
Отправитель: Bobs


 Вопрос № 1096

Доброго времени суток.
Почему не копируется файл? (Borland C++ 5.02)


Приложение:


Вопрос отправлен: 30.09.2003, 19:18
Отправитель: Andrey

[Следующий вопрос >>] [Список вопросов]

Отвечает BOLT

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

#include
#include
#include
#include
void main()
{
ifstream infile(
"c:\\2.txt");
ofstream outfile(
"c:\\1.txt");
if (! infile) cout << "No open c:2.txt";
if (! outfile) cout << "No open c:1.txt";
char word;
while ( infile >> word )
outfile << word;
getch();
}

Да прибудет с тобой Великая Сила!
This message was created by EMan 1.5


Ответ отправлен: 30.09.2003, 20:27
Отправитель: BOLT



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (31)
C / C++ (26)
Perl (7)
Builder / Delphi (21)
Pascal (23)
Basic / VBA (8)
Java / JavaScript (10)
PHP (13)
Криптография (9)
WinAPI (14)
Пользователю
Windows 95/98/Me (54)
Windows NT/2000/XP (59)
"Железо" (42)
Поиск информации (26)
Администратору
Windows NT/2000/XP (31)
Linux / Unix (15)
Юристу
Гражданское право (13)
Семейное право (10)
Трудовое право (10)
КоАП (8)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное