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

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


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

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

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

Выпуск № 269
от 13.12.2005, 21:54

Администратор:Калашников О.А.
В рассылке:Подписчиков: 248, Экспертов: 43
В номере:Вопросов: 5, Ответов: 13


Вопрос № 31030: Здравствуйте! Запарился искать ответ на свой вопрос, подскажете хотыбы где поискать на него ответ, может кто знает какие-нибудь экспертные системы где это за деньги делают(если такие вообще есть) может кто людей знает соответствующей квалифи...
Вопрос № 31032: Здравствуйте! Пожалуйста помогите мне найти самую лучшую среду для хранения битов и совершения действий над ними. Допустим у меня есть некия последовательность из бит 0101010011101001010111001, в long это врядли запишешь длины не хватит,...
Вопрос № 31036: Здравствуйте!помогите пожалуста ,мне надо считать данные из файла в Edit,только так, чтобы данные из первой строки файла записывались в Edit1,из второй в Edit2 и т.д....
Вопрос № 31043: Уважаемые эксперты ! Подскажите, пжлста, как вставить в программу на Си подпрограмму на Ассемблере. ОС Unix, компилятор Watcom CC++...
Вопрос № 31061: Здравствуйте . У меян вопрос.. Возможно ли такое : Допустим в браузере Опера мы открыли документ Html , в этом докупенте нарисована кнопка ... Можно ли нажать кнопку программно.. если можно то как? .. Среда Билдер 6 Спасибо....

Вопрос № 31.030
Здравствуйте!
Запарился искать ответ на свой вопрос, подскажете хотыбы где поискать на него ответ, может кто знает какие-нибудь
экспертные системы где это за деньги делают(если такие вообще есть) может кто людей знает соответствующей квалификации,
буду рад любой форме помощи. Спасибо. Вопрос собственно вот:

На обработчике кнопки простой код (Windows XP, VC++ 6.0, MFC) :

CTempDlg::OnButtonTemp
{
// запускаем дистрибутив Nero 6
CreateProcess(..."c:\distr\Nero6300.exe"...);
CloseHandle(hProcess);
CloseHandle(hThread);
// ждем появления окна
while(TRUE)
{
if(::FindWindow("Nero Setup")!=NULL)
break;
}
}

После CreateProcess неро благополучно старует, но после первого окна, где происходит распаковка файлов во временный

каталог, останавливается и ждет пока мы выйдем из цикла while. А мы ждем ее.... В итоге оба процесса стоят. Почему?
Это происходит с дистрибутивами, которые сначала распаковываются во временные файлы, а потом стартуют оттуда новыми

процессами. С остальными приложениями все в порядке. Почему это происходит? И самое главное как это обойти. Еще

дополнение. На быстрых компах все нормально. Там где атлоны и итаниумы 64 разрядные стоят и памяти 512 Мб. А происходит это

на пнях 3 и даже на Sempron 2800+ с 256 Мб на борту. Вопрос не решается уже 2 неделю ;-( Пробовал уже и ShellExecuteEx и

WinExec и из другого потока и даже другого процесса запускать. Безрезультатно. В чем дело?
Отправлен: 07.12.2005, 23:29
Вопрос задал: gvozdok (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Slava_
Здравствуйте, gvozdok!
Уточни такой момент:
Если параметр dwCreationFlags функции CreateProcess установлен как CREATE_SUSPENDED,
то сразу после создания процесса его главная задача будет находиться в приостановленном состоянии. Работу этой задачи можно возобновить при помощи функции ResumeThread:

DWORD STDCALL ResumeThread(HANDLE);
Ответ отправил: Slava_ (статус: 1-ый класс)
Отправлен: 08.12.2005, 22:50
Оценка за ответ: 5

Отвечает: Raptor1
Здравствуйте, gvozdok!
Проблема может быть в том, что такой цикл
while(TRUE)
{
if(::FindWindow("Nero Setup")!=NULL)
break;
}

отъедает слишком много ресурсов процессора, поэтому у тебя процесс Nero не ждет, а просто запускается медленно, а на быстрых компах соответственно быстро. Как вариант можно попробовать это решить путем понижения приоритета твоей программы, в которой цикл. Это можно сделать с помощью SetPriorityClass с параметром THREAD_PRIORITY_LOWEST или THREAD_PRIORITY_BELOW_NORMAL
Ответ отправил: Raptor1 (статус: Студент)
Отправлен: 08.12.2005, 23:07
Оценка за ответ: 5
Комментарий оценки:
спасибо, попробую, может поможет ;)


Вопрос № 31.032
Здравствуйте!

Пожалуйста помогите мне найти самую лучшую среду для хранения битов и совершения действий над ними.
Допустим у меня есть некия последовательность из бит 0101010011101001010111001, в long это врядли запишешь длины не хватит, да и памяти много съест, но зато если и записать в лонг, легко работать. Можно записать в массив bool, но тут уже обращаться к каждому элементу... короче получается не важно.
Есть ли у вас какие-нибудь предложения?
Отправлен: 07.12.2005, 23:34
Вопрос задал: Константин Константинович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Muad Dib
Здравствуйте, Константин Константинович!
В long int влезает точно, а в нектоторых операционных системах размеры long int равняются размерам int - 32 бита. У вас - даже меньше.
Ответ отправил: Muad Dib (статус: 1-ый класс)
Отправлен: 07.12.2005, 23:58

Отвечает: PROD
Здравствуйте, Константин Константинович!
"режь" последовательно кучками по n бит, переводи в десятичную систему и сохраняй в массиве инт или лонг. Я не знаю какие ты будешь с ними действия проводить, но пока мне непонятно чем тебе массив bool не понравился.
если последовательность не очень длинная то в строку засунуть можно, если эту последовательность нужно именно хранить а не постоянно обрабатывать то в строках ее можно сжать (за архивировать), хотя я бы не парился и взял бы bool
Ответ отправил: PROD (статус: 1-ый класс)
Отправлен: 08.12.2005, 18:52
Оценка за ответ: 1
Комментарий оценки:
Не привёл ни одного примера (исходника).
Просто массив не удобен, для действий над битами к примеру e = (a&b)|(c&!d);

Отвечает: Raptor1
Здравствуйте, Константин Константинович!
Ну вообще то эти 25 бит легко влезут в 32-битный long, а памяти это займет ровно 4 байта, но если такие последовательности могут иметь произвольную длину, то одним long не обойдешься. Для того чтобы выбрать наилучшее представление надо знать что какие операции потребуется выполнять с такими данными. Если простой индексированный доступ то можно и каждый бит писать в переменную (BYTE, а не BOOL), будет, быстро, но занимать места в 8 раз больше. Если же группы бит упаковывать в байты, или DWORD или что то еще, не важно что, то скорость доступа к отдельному биту будет меньше, но зато места сэкономишь. Если такие последовательности потребуется между собой сравнивать, складывать по модулю 2, соединять в одну и они могут быть значительного размера то выгоднее второй вариант, если длина их невелика, и часто требуется индексированый доступ, то выгоднее первый вариант, особенно если учесть то что он требует существенно меньше затрет на программирование. Для реализации второго варианта (упакованного) целесообразно написать класс типа вектора, в котором хранить упакованные биты, ну и сделать для него стандартный набор - конструктор, конструктор из объекта, операторы равенства, сложения, сравнения через оператор [] доступ к битам, а также Get/Set для бита и т.д.
Ответ отправил: Raptor1 (статус: Студент)
Отправлен: 08.12.2005, 23:09
Оценка за ответ: 4
Комментарий оценки:
Было бы неплохо если бы ты примеры привёл, т.е. исходники... А так ответ хороший аргументированный, да ещё и сведения о скорости.


Вопрос № 31.036
Здравствуйте!помогите пожалуста ,мне надо считать данные из файла в Edit,только так, чтобы данные из первой строки файла записывались в Edit1,из второй в Edit2 и т.д.
Отправлен: 08.12.2005, 02:46
Вопрос задала: Myrrrka (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Zitz
Здравствуйте, Myrrrka!

Это смотря на чем пишете, барышня!
Эсли под МФЦ то пожалуйста смотрите приложение...
пояснение: m_Edit1 и m_Edit2 - стринги связанные с эдитами,
добавить их можно используя КлассВизард->МемберВариаблас->ЭддВариабл
Ну или в ручную ;-)
А если у вас там допустим МНОГО строк и соответствунно МНОГО эдитов
то лучше использовать многострочную какую нить вещь типа Листа...

Приложение:

Ответ отправил: Zitz (статус: 2-ой класс)
Отправлен: 08.12.2005, 17:44

Отвечает: Ataman N. N.
Здравствуйте, Myrrrka!
Используйте процедуру ReadLn(.....);
Данная процедура построчно читает файл.
Ответ отправил: Ataman N. N. (статус: 3-ий класс)
Отправлен: 08.12.2005, 21:58

Отвечает: Raptor1
TRY
{
CStdioFile file( "c:\myfile.txt", CFile::modeRead | CFile::typeText );
DWORD dwBaseEditID=ID_EDIT1; // ID первого edit, они должны идти подряд, если не подряд
// исправь в resource.h, только обязательно в редакторе VC,
// а то можешь вообще проект запороть
DWORD dwEditLimit=10; // сколько всего edit-ов
CString strTemp;
while(1)
{
if(file.ReadString(strTemp))
{
this->SetDlgItemText(dwBaseID,strTemp);
dwBaseEditID+=1;
if(dwBaseEditID>dwEditLimit)
break;
}
else
break;
}
}
CATCH( CFileException, e )
{
e.ReportError();
}
END_CATCH
UpdateData(TRUE);
Invalidate();
Ответ отправил: Raptor1 (статус: Студент)
Отправлен: 10.12.2005, 14:52


Вопрос № 31.043
Уважаемые эксперты ! Подскажите, пжлста, как вставить в программу на Си подпрограмму на Ассемблере. ОС Unix, компилятор Watcom CC++
Отправлен: 08.12.2005, 09:47
Вопрос задал: 0legg (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, 0legg!
Очень просто. Есть конструкция asm{}. Например,

asm{
mov ax, myvar;
mul str;
......
}

Примерно так.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 08.12.2005, 10:04

Отвечает: Iluha
Здравствуйте, 0legg!
Смотря что тебе нужно. Если ты хочешь просто использовать ассемблерные вставки, то пиши _asm { ..... }
Если ты хочешь создать отдельный модуль с процедурой написанной на ассемблере, то тебе нужно организовать связь языка С с языком assembler.
Для компилятора Borland C++ будет выглядеть примерно так:
//вызывающая процедура на С
#include <stdio.h>
extern "C" void asmproc (int);
int main () {
int t = 0;
asmproc (t);
return 0;
}
//вызываемый модуль на асме
masm
model small
stack 256
.data
....
.code
public _asmproc
_asmproc proc c near t:WORD
....
_asmproc endp

Как сделать в Watcom не знаю( не использовал ни разу )

Ответ отправил: Iluha (статус: 1-ый класс)
Отправлен: 08.12.2005, 16:48

Отвечает: Muad Dib
Здравствуйте, 0legg!

Вот тут есть пример для GCC и nasm в качестве ассемблера:

http://www.opennet.ru/openforum/vsluhforumID9/4023.html

Ответ отправил: Muad Dib (статус: 1-ый класс)
Отправлен: 08.12.2005, 20:38


Вопрос № 31.061
Здравствуйте .
У меян вопрос.. Возможно ли такое :
Допустим в браузере Опера мы открыли документ Html , в этом докупенте нарисована кнопка ... Можно ли нажать кнопку программно.. если можно то как? ..
Среда Билдер 6
Спасибо.
Отправлен: 08.12.2005, 12:16
Вопрос задал: __Cheat3r (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gibbel
Здравствуйте, __Cheat3r!

Если вы знаете координаты кнопки внутри окна оперы, то можно послать окну оперы сообщения, имитирующие клик мыши в указанной точке.
Других вариантов решения данной задачи я не вижу (кнопки веб-страниц не являются стандартными кнопками системы и прорисовываются движками браузеров самостоятельно, поэтому напрямую сообщения о нажатии кнопки послать невозможно).
---------
От жизни еще никто не умирал
Ответ отправил: Gibbel (статус: *Ветеран)
Отправлен: 08.12.2005, 12:37

Отвечает: Muad Dib
Здравствуйте, __Cheat3r!

Было бы легче ответить если бы вы объяснили хотя бы примерно зачем это вам нужно.

Если надо в итоге отправить на сервер информацию (например нажать кнопку в форме отправки SMS-ки), то могут быть полезны ссылки (там не совсем C++ Builder, но направление копания очевидно.):

http://www.sql.ru/forum/actualthread.aspx?tid=123675
http://www.sql.ru/forum/actualthread.aspx?tid=126909
http://www.web-build.info/print.php?type=perlcgi&id=1099849767
Ответ отправил: Muad Dib (статус: 1-ый класс)
Отправлен: 08.12.2005, 21:12
Оценка за ответ: 4


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

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

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

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

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


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


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное