Вопрос № 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)
// 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
Отвечает: 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
Ответ отправил: 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 не подойдет т.к. данная функция должна работать на другом процессоре с другими командами. Надеюсь на помощь. Заранее спасибо!
Отвечает: 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