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

RusFAQ.ru: Win API


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


RusFAQ.ru: Win API

Выпуск № 045
от 24.01.2004, 16:50

Администратор:
Имя: Калашников О. А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 115
Отправлено ответов: 192
Активность: 166.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


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

BOLT
Статус: Профессиональный
Общий рейтинг: 168.75
URL: Начинающему программитсу: софт, примеры, документация, Assembler, C & C++.
Телефон: 02
[Подробней >>]
Pawel
Статус: Опытный
Общий рейтинг: 166.27
[Подробней >>]


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

Вопрос № 108. Эксперту Bolt! По поводу Вопроса 106.Я и сам использую ф-ию wsprintf,согласен,но мне как раз хотелос... (ответов: 1)
Вопрос № 109. Привет всем! У меня возник вопрос, касающийся критических секций в многопоточных приложениях. Дело в... (ответов: 2)

Вопросов: 2, ответов: 3


 Вопрос № 108

Эксперту Bolt!
По поводу Вопроса 106.Я и сам использую ф-ию wsprintf,согласен,но мне как раз хотелось бы разобраться с ф-ей FormatMessage.В ней есть одна хорошая черта - она по номеру ошибки выдает ее текстовое сообщение.И с этим все понятно.Неясно только,как в это ее сообщение можно вставить свои строки,типа имя файла,и т.д.Т.е. как поступить с ее предпоследним параметром.Вот в этом-то и была суть вопроса.
По поводу Вопроса 107. Все понятно.Спасибо.Дело в том,что я в MSDN этого найти не смог,а,если бы даже и нашел,то у меня Visual 6,и там об XP,сам понимаешь,ничего нет.А мне нужно именно по нему.И остался еще один невыясненный вопрос по поводу как отличить Home от Pro.Есть ли возможность это определить?
Огромное спасибо.



Вопрос отправлен: 17.01.2004, 13:50
Отправитель: Alex

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

Отвечает BOLT

Доброе время суток, Alex!
1) Ну раз ты умеешь пользоваться функцией wsprintf в чем тогда проблемы? Создаешь нову строку и вставляешь в нее сообщение об ошибке + имя файла. Чтобы ты меньше мучился, я написал для тебя код:


CHAR file_name[] = "c:\\333.exe";
HANDLE hFile = CreateFile( file_name, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
// Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Вставляем имя файла
LPSTR message = new CHAR[sizeof( lpMsgBuf ) + sizeof( file_name ) + 2];
wsprintf( message,
"%s %s", lpMsgBuf, file_name );
LocalFree( lpMsgBuf );
//
MessageBox( NULL, message, "Error", MB_OK | MB_ICONINFORMATION );

2)Да можно. Следует использовать структу OSVERSIONINFOEX вместо OSVERSIONINFO. Посмотри в заголовочном файле Winbase.h если эта структура определена, т.к. появилась она только в Windows NT SP6. Если эта структура определена, тогда давай свой e-mail и я вышлю док по этой структуре.


Ответ отправлен: 18.01.2004, 13:36
Отправитель: BOLT


 Вопрос № 109

Привет всем!
У меня возник вопрос, касающийся критических секций в многопоточных приложениях. Дело в том, что я всегда считал, что критическая секция – это фрагмент программы, защищенный от одновременного выполнения несколькими потоками. Критическую секцию в данный момент может выполнять только один поток. Тут мне все понятно. Недавно я скачал из интернета курс лекций: ‘Программирование для Windows: введение в интерфейс Win API’. Автор курса: Архипова Елена Николаевна, старший преподаватель кафедры КТС, ВГУЭС. В нем, понятие ‘критическая секция’ определено так: раздел кода, во время выполнения которого поток не может быть прерван. Может быть, кто ни будь из Вас, объяснит мне, что это значит? Ведь если допустить, что это действительно так, то получается что, любой взятый поток, войдя в критическую секцию, может захватить себе все процессорное время на неопределенный срок. IMHO, такого не может быть! Я хочу услышать Ваши мнения по данному вопросу, а то я уже не знаю, что и думать…
Заранее, спасибо за Ваши ответы.



Вопрос отправлен: 20.01.2004, 16:49
Отправитель: Олег

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

Отвечает Pawel

Доброе время суток, Олег!
Код в критических секциях действительно выполняется в один поток. Насчёт непрерывного выполнения - это невозможно.

Ответ отправлен: 20.01.2004, 19:15
Отправитель: Pawel


Отвечает BOLT

Добрый день, Олег!
Критическая секция (critical section) - это небольшой участок кода, требующий монопольного доступа к каким-то общим данным. Она позволяет сделать так, чтобы единовременно только один поток получал доступ к определенному ресурсу. Вот и все.

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



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (23)
C / C++ (16)
Perl (3)
Builder / Delphi (16)
Pascal (17)
Basic / VBA (5)
Java / JavaScript (4)
PHP (13)
Криптография (5)
WinAPI (10)
Радиоэлектроника (4)
Пользователю
Windows 95/98/Me (38)
Windows NT/2000/XP (55)
"Железо" (29)
Поиск информации (18)
Администратору
Windows NT/2000/XP (28)
Linux / Unix (9)
Юристу
Гражданское право (17)
Семейное право (11)
Трудовое право (13)
КоАП (12)

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




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


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

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

В избранное