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

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


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 832
от 26.08.2007, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 506, Экспертов: 67
В номере:Вопросов: 4, Ответов: 12


Вопрос № 99101: Здравствуйте уважаемые эксперты! Подскажите, как запустив приложение дождаться его завершения? Т.к. запуск идет по таймеру. И необходимо, что бы при событии таймера остановить таймер, запустить приложение, дождатьяс его завершения и возобнови...
Вопрос № 99106: Помогите Скачать книги по С++ Builder6 ...
Вопрос № 99143: Здравствуйте уважаемые эксперты! Каким образом можно преобразовать string в LPTSTR ? Это необходимо - т.к. сначала формируется строка, а потом она должна подстваляться в CreateProcess(), у которого второй параметр как раз LPTSTR. Ну или х...
Вопрос № 99179: Добрый день. У меня вопрос касаемо битов. Нужна универсальная функция вида void CopyBits(char *pSrc, int iSrcOffset, int iCount, char *pDst, int iDstOffset), которая бы копировала iCount бит, находящихся по адресу pSrc, начиная с бита iSrcOffset, нах...

Вопрос № 99.101
Здравствуйте уважаемые эксперты!
Подскажите, как запустив приложение дождаться его завершения?
Т.к. запуск идет по таймеру. И необходимо, что бы при событии таймера остановить таймер, запустить приложение, дождатьяс его завершения и возобновить таймер.
Все ни как не получается этого добиться((
Код самого таймера в приложении.

Приложение:

Отправлен: 21.08.2007, 10:53
Вопрос задал: aaqs (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: C4tnt
Здравствуйте, aaqs!

Отличный пример из msdn на эту тему:

void main( VOID )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// Start the child process.
if( !CreateProcess( NULL, // Обычно тут идёт название исполняемого модуля
TEXT("MyChildProcess"), // а тут командная строка
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure. После вызова этой
// функции содержит много полезной информации о процессе
)
{
printf( "CreateProcess failed (%d). ", GetLastError() );
return;
}

// Ждём завершения процесса. INFINITE - ждать бесконечно. Вместо INFINITE можно указать
// время ожидания (в тысячных долях секунды). Функция возвращает WAIT_OBJECT_0 если
// процесс завершился или WAIT_TIMEOUT если вышло время ожидания.

WaitForSingleObject( pi.hProcess, INFINITE );

// Удаляем объекты.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
---------
Теперь к нашим ответам осталось лишь найти вопросы
Ответ отправил: C4tnt (статус: 3-ий класс)
Ответ отправлен: 21.08.2007, 11:16
Оценка за ответ: 5
Комментарий оценки:
отлично! спасибо!

Отвечает: Aristos
Здравствуйте, aaqs!

Надо проверять сообщение WM_TIMER. Например, как в приложении

Приложение:

Ответ отправил: Aristos (статус: 3-ий класс)
Ответ отправлен: 21.08.2007, 11:27
Оценка за ответ: 5


Вопрос № 99.106
Помогите Скачать книги по С++ Builder6
Отправлен: 21.08.2007, 11:13
Вопрос задал: Иванов Иван Абрамович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: V1s0r
Перенесено в минифорум, т.к. не является ответом на вопрос. [ Alexandre V. Tchamaev ]
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 21.08.2007, 11:23
Оценка за ответ: 3

Отвечает: KuchumHan
Здравствуйте, Иванов Иван Абрамович!
Если Вы хотите изучить лучше сначало изучить С++,а потом уже С++ Builder6, кстати в этом ничего особенного нет. Вот очень хороший сайт:http://delphiworld.narod.ru/ , сам начал изучение сиподобных с него...........
Ответ отправил: KuchumHan (статус: Студент)
Ответ отправлен: 21.08.2007, 14:19
Оценка за ответ: 5

Отвечает: Rockie
Здравствуйте, Иванов Иван Абрамович!

Используйте поиск, вот пример запроса(я практически ничего не менял в вашем собственном запросе):
ссылка

Также на любом тематическом форуме по C++ Builder или C++ скорее всего будет раздел "Книги" или "Ресурсы", где также можно найти ссылки на литературу, как к примеру тут: http://www.xserver.ru/computer/sredaprogr/bcb/
или тут(необходимо сначала зарегестрироваться):
http://cbuilder.ru/index.php?action=tpmod;dl

Также некоторые ссылки можно найти в википедии:
http://ru.wikipedia.org/wiki/C++_Builder

От себя бы порекомендовал для начала "Кент Рейсдорф, Кен Хендерсон. Borland C++ Builder. Освой самостоятельно", взять можно здесь:
http://c-books.info/books/load.php?ty=c&lng=RU

Отредактировано: длинная ссылка.
--------
=Alexey G. Gladenyuk= (*Мастер-Эксперт)
Ответ отправил: Rockie (статус: 2-ой класс)
Ответ отправлен: 21.08.2007, 15:03
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь! Все просто замечательно

Отвечает: Терсков Сергей
Здравствуйте, Иванов Иван Абрамович!
По ссылке вы найдете ветку форума по книгам С/С++. В третьем сообщении содержится масса ссылок на книги именно по С++ Builder. думаю этих источников должно быть достаточно.
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 22.08.2007, 03:23
Оценка за ответ: 5
Комментарий оценки:
Отлично просто отлично


Вопрос № 99.143
Здравствуйте уважаемые эксперты!
Каким образом можно преобразовать string в LPTSTR ?
Это необходимо - т.к. сначала формируется строка, а потом она должна подстваляться в CreateProcess(), у которого второй параметр как раз LPTSTR.
Ну или хотя бы char* в LPTSTR (т.к., из string можно получить char* - функция c_str())
Отправлен: 21.08.2007, 15:43
Вопрос задал: aaqs (статус: 5-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Sergey A. Wedensky
Здравствуйте, aaqs!

Если Ваш проект использует набор символов ANSI или EOM, LPTSTR и есть char*. Если юникод - LPTSTR это wchar_t*. Для преобразования можно использовать функцию MultiByteToWideChar (обратно - WideCharToMultiByte).
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 21.08.2007, 15:54
Оценка за ответ: 5
Комментарий оценки:
да, как раз MultiByteToWideChar() подошел

Отвечает: Sema
Здравствуйте, aaqs!
можно вот так попробовать
(LPTSTR) str
Ответ отправил: Sema (статус: 4-ый класс)
Ответ отправлен: 21.08.2007, 16:09

Отвечает: Aristos
Здравствуйте, aaqs!

LPCTSTR (и LPTSTR) это указатель на обобщенную строку. Обобщенная строка здесь в том смысле, что в зависимости от настроек проекта LPCTSTR может быть как обычной ANSI строкой (const char*), так и Unicode (const wchar_t*). std::string работает только с char. Для работы с Unicode есть класс std::wstring. Кроме того можно определить свой универсальный класс для работы с обобщенными строками.
Кроме того, функция c_str() возвращает указатель на константную строку (cosnt char* или const wchar_t*), а CreateProcess принимает в качестве второго параметра указатель на НЕконстантную строку, которую может изменять (и изменяет, но возвращает после своей работы к первоначальному виду). Следовательно, надо дополнительно использовать некий временный буфер. Все действия для обощенных строк в приложении.

Существует более простой способ - использовать макрос CA2T для ANSI строк, CW2T для Unicode строк и CT2T для обобщенных строк. Это потребует подлючения заголовочного файла <atlconv.h>. Пример использования в приложении.

ps: рекомендую ознакомиться с методами работы с Unicode строками. Например, здесь - http://rosigma.com/76.aspx (по ссылке 2я глава из книги Джеффри Рихтера "Windows для профессионалов").

Приложение:

Ответ отправил: Aristos (статус: 3-ий класс)
Ответ отправлен: 21.08.2007, 16:52
Оценка за ответ: 5


Вопрос № 99.179
Добрый день. У меня вопрос касаемо битов. Нужна универсальная функция вида void CopyBits(char *pSrc, int iSrcOffset, int iCount, char *pDst, int iDstOffset), которая бы копировала iCount бит, находящихся по адресу pSrc, начиная с бита iSrcOffset, находящегося в первом байте. Результат сохраняется в pDst, начиная с бита iDstOffset. Оффсеты задаются относительно старших битов, т.е. оффсет равный 7 означает, что биты считываются/записываются с самого старшего бита. Я написал несколько частных реализаций данной функции, но все они слишком громоздкие и, я думаю, медленные. Подозреваю, что эту задачу можно решить просто и элегантно. Версия на языке ассемблера x86 не подойдет т.к. данная функция должна работать на другом процессоре с другими командами. Надеюсь на помощь. Заранее спасибо!
Отправлен: 21.08.2007, 19:56
Вопрос задал: Knight_lightning (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: kool
Здравствуйте, Knight_lightning!
Здесь важно оптимизировать алгоритм.
Не нужно всегда копировать биты.
Если некоторое кол-во бит, кот вам нужно скопировать,
целиком заполняют байт, слово или четыре байта, лучше
копировать соответственно по байтам, словам, двойным словам.
Те же биты, кот не полностью запоняют байт вообще мажно скопировать
с помощью маски.
То же самое и с позицией нужного бита.
Внутри функции позиции бита, например, iSrcOffset можно представить
в виде 8*(размер в байтах числа iSrcOffset)+остаток от деления iSrcOffset на 8.
И числа будут не астрономические и позиции вычисляется удобней.
Удачи!


---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 21.08.2007, 21:06

Отвечает: Aristos
Здравствуйте, Knight_lightning!
К сожаленью, "универсального" элегантного решения не существует. Все-таки единица адресации (на любой архитектуре) это байт. В пределах одного байта, слова (или двойного и четверного слова) можно делать с помощью побитовых операций - &, |, ~, >> и <<.
Пример в приложении.

ps:
unsigned char - байт
unsigned short - слово
unsigned int - двойное слово
unsigned __int64 - четверное слово (для компиляторов MS)

Приложение:

Ответ отправил: Aristos (статус: 3-ий класс)
Ответ отправлен: 22.08.2007, 01:25

Отвечает: Терсков Сергей
Здравствуйте, Knight_lightning!
Вот простая связка функций взятия и установки значения бита в определенной позиции. После этого вся ваша функция сводится в один цикл... (См. в приложении)

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 22.08.2007, 10:03


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.57 от 25.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное