Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как послать значение в стандартный пОток?  (Прочитано 23102 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zuuuuk
Постоялец

ru
Offline Offline

« : 08-10-2010 19:16 » 

Доброго врмемени суток.

подскажите, как можно, используя cin<<х
задать значение х не из командной строки, а из другой функции.
если не сложно, то маленький пример.

второй вопрос.
как отследить, какие длл использует программа.
а то написал прогу. а она не без MSVS не работает. просит тамышние библиотеки.
хочу эти длл собрать в одну папку, пусть кушает.

зы зарание благодарю

« Последнее редактирование: 08-10-2010 19:18 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 08-10-2010 19:26 » 

1)  ::GetStdHandle(STD_INPUT_HANDLE) вернёт хендл потока вывода, пиши туда как в обычный файл ( ::WriteFile(...) )
2) в студии №6 была утилита DEPENDS.EXE , которой можно глянуть нужные длл, перетащив в окно экзешник. В студии 9 я эту утилиту не нашёл почему то
тут залил http://zalil.ru/29788228
только она может ругнуться на отсутствие какой-либо длл, нужной для её работы. Проверишь, скажешь ) Скину
« Последнее редактирование: 09-10-2010 18:28 от Алексей1153++ » Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 08-10-2010 19:29 » 

второй: http://www.dependencywalker.com/
PS это она и есть)
PPS чтобы избежать этого - используйте статическую линковку: ключи компилятора  /MT вместо  /MD (опции Multi-threaded вместо Multi-threaded DLL  Code Generation -> Runtime Library)
в противном случае - правильнее дополнять свой пакет - Redist пакетами от майкрософта а не копировать недостающие библиотеки
« Последнее редактирование: 08-10-2010 20:08 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zuuuuk
Постоялец

ru
Offline Offline

« Ответ #3 : 08-10-2010 20:51 » 

огромное спасибо всем вам за помощ.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 09-10-2010 05:20 » 

в противном случае - правильнее дополнять свой пакет - Redist пакетами от майкрософта а не копировать недостающие библиотеки
а это как ?
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 09-10-2010 09:44 » 

например http://www.microsoft.com/downloads/details.aspx?FamilyID=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displayLang=ru
или для VC6 http://support.microsoft.com/kb/259403

полная информация о способах подготовки дистрибутивов - как обычно есть в msdn)
Deployment (C++)
Determining Which DLLs to Redistribute
Redistributing Visual C++ Files
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 09-10-2010 12:12 » 

подскажите, как можно, используя cin<<х
задать значение х не из командной строки, а из другой функции.
если не сложно, то маленький пример.

Точнее опиши задачу, то что ты спросил это x=func();
Записан

Странно всё это....
zuuuuk
Постоялец

ru
Offline Offline

« Ответ #7 : 09-10-2010 13:08 » 

подскажите, как можно, используя cin<<х
задать значение х не из командной строки, а из другой функции.
если не сложно, то маленький пример.
Точнее опиши задачу, то что ты спросил это x=func();
я запускаю поток cin<<x
он ожидает получение данных из командной строки в x. потом выполняется следующая строка.
 а я хочу эти данные отправить из самой программы в cin. (в поток) а затем сам поток отправит их в х.
то есть посылать данные не из командной строки а из самой программы
« Последнее редактирование: 09-10-2010 14:13 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 09-10-2010 14:21 » 

я запускаю поток cin<<x
это не запуск потока, это ты выводишь в поток ввода (работать не будет) , но при этом будет ожидаться ввод с клавы (сам ввод никуда не сохранится)
Записан

zuuuuk
Постоялец

ru
Offline Offline

« Ответ #9 : 09-10-2010 16:07 » 

прошу прощения не cin<< x; , а cin >> x;

Добавлено через 4 минуты:
прошу прощения не cin<< x; , а cin >> x;
и можно ли  прервать ожиданиние ввода с клавиатуры и ввести свое значение из программы.
« Последнее редактирование: 09-10-2010 16:11 от zuuuuk » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 09-10-2010 16:18 » 

zuuuuk,  прервать по таймауту что ли ? Или как ты это видишь?
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 09-10-2010 16:19 » 

Алексей1153++, я так понимаю, он хочет, чтобы в этот поток кто-то что-то записал (точнее, сама программа себе в stdin писала).
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 09-10-2010 16:42 » 

дык, наверное, это невозможно (я, конечно, все тонкости не знаю)

разве что запустить дочерний процесс, который это сделает ))

Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 09-10-2010 18:08 » 

Алексей1153++,
почему невозможно? и зачем второй процесс, когда достаточно второй нити? или нет?
 посмотите тут может поможет.
RXL упоминал что "Существуют механизмы узнать готовность IO до выполнения операции." что он имел в виду?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 09-10-2010 18:32 » 

Ochkarik, нить вряд ли поможет - ведь в ДАННОМ процессе конец in-трубы запрещён на запись. Я так рассуждаю ) Разве что как-то его разрешить на запись


А вот узнать готовность можно, наверное, так

Код:
hIN=::GetStdHandle(STD_INTPUT_HANDLE);
DWORD dwdNowInFile=0;
::PeekNamedPipe(hIN,0,0,0,&dwdNowInFile,0);
if(dwdNowInFile!=INVALID_FILE_SIZE && dwdNowInFile!=0)
{
   есть данные
}
« Последнее редактирование: 09-10-2010 18:33 от Алексей1153++ » Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 09-10-2010 18:53 » 

Алексей1153++, это не готовность... это проверка количества данных в пайпе... кстати, наверное правильнее заменить на PeekConsoleInput()
хм... или это я погорячился? там еще и сообщения от мышки можно принимать?
а записывать WriteConsoleInput/WriteConsoleOutput/WriteConsole/ReadConsole.
я имел в виду как другой поток может узнать что первый - ждет ввода с консоли?

PS он не защищен.
GetStdHandle -
Цитата
If the function succeeds, the return value is a handle to the specified device, or a redirected handle set by a previous call to SetStdHandle. The handle has GENERIC_READ and GENERIC_WRITE access rights, unless the application has used SetStdHandle to set a standard handle with lesser access.
« Последнее редактирование: 09-10-2010 19:03 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 09-10-2010 19:03 » 

Алексей1153++, это не готовность... это проверка количества данных в пайпе...
я как бы это и понимаю под готовностью ) Что есть данные.

кстати, наверное правильнее заменить на PeekConsoleInput()
вот тут не знаю, не пользовался.
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 09-10-2010 19:04 » 

первый поток ждет ввода.
второй - пытается ему подсунуть данные.
вопрос: как второму - узнать что пора подсовывать?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 09-10-2010 19:06 » 

второму узнавать ничего точно не надо - он всё равно периодически пытается читать ввод. Как только данные появятся, произойдёт чтение
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 09-10-2010 19:09 » 

ну... если только все равно, что и в какой момент вводить...
а вообще задача какая то "странная")
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #20 : 09-10-2010 19:15 » 

а мне тоже кажется, для сей задачи нужно

это x=func();


Добавлено через 1 минуту и 32 секунды:
а, вот ещё вариант. Создать в программе промежуточный поток, куда перекидывать то, что читается из cin. В нужный момент туда можно записать свои данные.

А вместо cin везде читать из этого промежуточного
« Последнее редактирование: 09-10-2010 19:17 от Алексей1153 » Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 09-10-2010 21:03 » 

а зачем?) зачем передавать данные внутри одной программы через cin???
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 09-10-2010 21:57 » 

Ochkarik,
1) не передавать, а именно подсунуть (например, дополнить лог от прибора комментариями - у меня такой случай был)
2) ну хочется так человеку! Улыбаюсь)
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 10-10-2010 07:51 » 

что тут сказать... А черт его знает...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #24 : 11-10-2010 03:24 » 

нихрена не понял
мое понимание задачи
Вариант 1:
0. хитрый способ передать данные внутри процесса
1. в одном месте делаю cout << y;
2. в другом месте делаю cin >> x;
3. всё это в рамках одного процесса

Вариант 2:
0. передать данные между процессами, тут всё просто даже кода специального писать не надо

Вариант 3:
0. Человек хочет выполнить какую-то, очень простую вещь и решил, что это удобно делать через потоки IO. Например решил преобразовать строку в число или наоборот. Ну тут тоже всё лечится.

zuuuuk, давайты расскажешь зачем такой жестокий изврат, я так понимаю никому из присутствующих тут людей столь экзотическая мысль в голову не приходила.
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines