Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: 0Vovan0
Дата сообщения: 20.04.2006 03:46
Abs62
Хех,, понятнее, в принципе...
В Dev-C++ это заработало, в остальных нет
Ладно, не буду тебя больше мучать, спасибо за помощь.

Добавлено:
Abs62
Понятно конечно, в принципе...
ТОлько непонятно почему этот код заработал только в DEv-C++, а в остальных двух все-равно ругается(( и не работает.

Ну ладно, не буду больше тебя мучать, спасибо за помощь.
Автор: Abs62
Дата сообщения: 20.04.2006 07:42
0Vovan0
На C, в отличие от C++ переменные надо объявлять до их использования:

Код:
int random(int num)
{
int n;
n=rand();
return(n*num/(RAND_MAX+1));
}
Автор: JekaCh
Дата сообщения: 20.04.2006 11:32
Возник небольшой вопросик про компонент PopupMenu, подскажите плиз. При его использование, т.е. правый щелчок мыши->появляется меню и пока какой-нибудь пункт не выберешь приложение останавливается. Как этого избежать?
Автор: Mickey_from_nsk
Дата сообщения: 20.04.2006 11:55
JekaCh
Обработку цикла сообщений для данного окна выносить в другой поток
А вообще - более детальная информация о программе нужна.
Работа в виндах с окнами и потоками очень веселая песня.
Автор: Iceman82
Дата сообщения: 20.04.2006 13:20
JekaCh
Если ты используешь VisualC++.NET, то можно использовать метод DoEvents() класса Application (Application->DoEvents()).
Автор: JekaCh
Дата сообщения: 20.04.2006 19:41
Сорри за малое количество инфы. Програмлю на Borland Builder 6.0. Программа генерит разные числа по нажатию Button1, выводит их в RichEdit, и рисует гистограмму на Chart1 в Series1. Я хотел чтобы при нажатие на Chart появлялось меню с выбором какую переменную на компоненте TChart отображать. Сделал но обнаружил что когда нажимую правую кнопку и появляется меню вывод в RichEdit и TChart прекращается. когда выбирую переменную продолжается с того же момента на котором прервалась.

Цитата:
Обработку цикла сообщений для данного окна выносить в другой поток

Как это реализуется?
Автор: Mickey_from_nsk
Дата сообщения: 21.04.2006 12:22
Iceman82
Боюсь, что этот метод не поможет отцу русской демократии, даже не из-за того, что он на билдере работает... Затычка это ИМХО, причем не хорошая и вредная.
JekaCh
Приходит в голову только один способ, правда не знаю как с многопоточностью в VCL. Создавай меню и запускай ее на обработку в отдельном потоке.
Автор: HODOK
Дата сообщения: 21.04.2006 12:54
#include<iostream>
#include<vector>
using namespace std;

struct stack
{
    int index;
};


void main()
{
    vector<stack>prohod(100);
    typedef vector<stack>::iterator K;
    K hod(100);
}

//'initializing' : cannot convert from 'const int' to 'struct stack *'
почему у меня не получается поставить итератор к вектору
Автор: Iceman82
Дата сообщения: 21.04.2006 13:03
Mickey_from_nsk

Цитата:
Боюсь, что этот метод не поможет отцу русской демократии, даже не из-за того, что он на билдере работает... Затычка это ИМХО, причем не хорошая и вредная.

Возможно, не спорю, но зато яростно применяемая во всех примерах в книгах и в самом MSDN'e ...
Автор: Mickey_from_nsk
Дата сообщения: 21.04.2006 13:04
Iceman82
Только сегодня, в т.ч. и про это прочитал.
http://www.rsdn.ru/article/dotnet/WinForms20.xml
И почему то согласен.

Добавлено:
HODOK
Боюсь что у итератора немного другие конструкторы.
Объявляя

Код:
K hod(100);
Автор: JekaCh
Дата сообщения: 21.04.2006 17:53
Mickey_from_nsk
А что значит в отдельном потоке? Как это делается?
Автор: 0Vovan0
Дата сообщения: 24.04.2006 02:52
Abs62
Ура! Дот меня доперло!

В общем свою ошибку я понял, но вопросики еще остались;).

Значит rand возвращает псевдослучайное число от нуля до 32768, причем никакого параметра ему не передается. С этим все понятно, теперь.

А вот со Srand не очень понятно, я мня в справочнике написано:

Цитата:
Функция srand устанавливает начальную точку для генерации
множества псевдослучайных целых. В качестве аргумента seed для
переустановки генератора используется 1. Любое другое значение
seed устанавливает генератор в начальную случайную точку.


Что это за начальная точка? Что делает параметр seed? Что такое RAND_MAX?

В общем, как я понимаю, все эти проблемы из-за того, что Dev-C++, JFC и Pellec C расчитаны на чистый С/С++, а виж студия и билдер на "продвинутый". Не подскажеш какие еще отличия имеются, хоть примерно?



Автор: Abs62
Дата сообщения: 24.04.2006 07:31
0Vovan0

Цитата:
Что это за начальная точка?

Генератор вычисляет последующее псевдослучайное число из предыдущего по некой формуле. Начальная точка - первое число этой последовательности.

Цитата:
Что делает параметр seed?

Устанавливает начальную точку, как и написано в документации.

Цитата:
Что такое RAND_MAX?

Максимальное число, которое может вернуть rand.
Автор: Mickey_from_nsk
Дата сообщения: 24.04.2006 08:05
JekaCh
Не знаю, как работать с потоками в Builder. Когда программировал на нем до таких тонкостей не опускался.
В целом - надо выносить процедуру вывода результатов в поток, отдельный от обработки очереди сообщений.
Если не ошибаюсь, в VCL это делается созданием класса, порожденного от TThread и переопределением метода (по моему - Run). В этом методе производи вывод на экран.

Еще раз повторюсь, работа с потоками и GUI в виндах тема очень геморройная в связи с тем, что винды выделяют очередь событий ТОЛЬКО для того потока, который создал окно. Поэтому, работать с окном из других потоков надо очень осторожно.
Автор: HODOK
Дата сообщения: 24.04.2006 11:59

Цитата:
Добавлено:
HODOK
Боюсь что у итератора немного другие конструкторы.
Объявляя

Код:
K hod(100);


Ты вызываешь конструктор итератора и передаешь ему на вход целое число. Вот он тебя и не понимает и очень удивляется.



а почему с list работает, он же здесь вроде ячейки работает...что бы длинное не писать
заменяешь итератором покороче(имя)....или не так
Автор: Mickey_from_nsk
Дата сообщения: 24.04.2006 12:21
HODOK

Цитата:
а почему с list работает, он же здесь вроде ячейки работает...что бы длинное не писать
заменяешь итератором покороче(имя)....или не так

А ты на какой системе работаешь? Какой компилятор, какой stl?
У меня на VS2003 нифига лист не работает.
В принципе, может это - фича твоей реализации stl, когда итератор позволяет напрямую указывать позицию в списке. Но объявляя итератор ты по любому должен его связать с этим списком. Это делается функциями типа begin, end или функциями прямого доступа (оператор []).
А как понять запись

Код:
list<stack>::iterator iter(200)
Автор: 0Vovan0
Дата сообщения: 24.04.2006 23:37
Abs62
Спасибо, щас попробую.

а как насчет
Цитата:
В общем, как я понимаю, все эти проблемы из-за того, что Dev-C++, JFC и Pellec C расчитаны на чистый С/С++, а виж студия и билдер на "продвинутый". Не подскажеш какие еще отличия имеются, хоть примерно?


Неприятно будет искать долго и мучительно ошибку в коде, если она окажется из-за разных версий си.
Автор: Abs62
Дата сообщения: 24.04.2006 23:51
0Vovan0

Цитата:
В общем, как я понимаю, все эти проблемы из-за того, что Dev-C++, JFC и Pellec C расчитаны на чистый С/С++, а виж студия и билдер на "продвинутый".

Это проблемы не из-за разных версий, а просто от недостатка опыта.
Вот C и C++ действительно путать не следует. Хоть C++ и разработан на базе C, отличается он весьма существенно.
Автор: 0Vovan0
Дата сообщения: 25.04.2006 02:24
Abs62
Я имел в виду различия типа в борланд/виж судии те же random и randomize присутствуют а в Dev-C++ и т.д нет. Чего еще меня порадует такого, что в учебнике написано что работает, а у меня не захочет.

Я ж только учусь пока, и опыта действительно не хватает.
Автор: Abs62
Дата сообщения: 25.04.2006 07:19
0Vovan0
В студии random и randomize отсутствуют - это борландовская фича.

Цитата:
Чего еще меня порадует такого, что в учебнике написано что работает, а у меня не захочет

Зависит от учебника. Не заморачивайся раньше времени, столкнёшься - разберёшься.
Автор: 0Vovan0
Дата сообщения: 25.04.2006 14:55

Цитата:
столкнёшься - разберёшься.

Ладно, как столкнусь - буду вопить о помощи тут
Автор: TeXpert
Дата сообщения: 26.04.2006 05:12
Mickey_from_nsk

Цитата:
...работа с потоками и GUI в виндах тема очень геморройная в связи с тем, что винды выделяют очередь событий ТОЛЬКО для того потока, который создал окно


Да ничего подобного, хотел сказать, ничего геморройного, вся эта кухня прекрасно описана в Рихтере, только не надо сюда идиотский VCL и Builder примешивать (это только запутывает суть проблемы)

Цитата:
...правда не знаю как с многопоточностью в VCL

потому что это есть вопрос подсистемы Win32, а так говорить некорректно.

Цитата:
...винды выделяют очередь событий ТОЛЬКО для того потока, который создал окно

Что означает ТОЛЬКО? Иначе у тебя (вернее, в системе) получится каша. Поток и есть главная единица исполнения, и у каждого потока своя очередь сообщений, если только этому потоку есть смысл его обрабатывать (то есть, если он создавал окно).

А так, твоя подсказка
Цитата:
...в VCL это делается созданием класса, порожденного от TThread и переопределением метода (по моему - Run). В этом методе производи вывод на экран

по-моему, вполне годится, но вот чтобы его реализовать, придётся проштудировать Рихтера, причём не только главы про многопоточность, но и про очередей сообщений и про потоки вообще, и тогда сразу отпадут многие вопросы. Господин Abs62 это подтвердит.

Автор: Mickey_from_nsk
Дата сообщения: 26.04.2006 06:06
TeXpert

Цитата:
Что означает ТОЛЬКО? Иначе у тебя (вернее, в системе) получится каша. Поток и есть главная единица исполнения, и у каждого потока своя очередь сообщений, если только этому потоку есть смысл его обрабатывать (то есть, если он создавал окно).

Насколько я помню, в X Windows такая фигня отсутствует. Там есть системная очередь событий от окон. Она принадлежит процессу. А сколько потоков будут ей пользоваться - дело исключительно программиста.
По поводу реализаций VCL и Win32. Еще раз повторю - не знаю как борланд все сделал. Можно по разному обойти вопросы вызовов методов из разных потоков. При этом тот же Invoke можно встроить прямо в библиотеку. Почему это не сделано в .NET Forms я не понял. Видимо для эффективности.
Кстати, на какую книгу Рихтера ссылка идет?
Автор: TeXpert
Дата сообщения: 26.04.2006 06:42
Mickey_from_nsk

Цитата:
Насколько я помню, в X Windows такая фигня отсутствует

Это ты про XP?
Откуда такие сведения?
Насколько я знаю, даже в Windows Server 2003 дело обстоит так же.
А если имел в виду X Window System, то это не наша тема.


Цитата:
Она принадлежит процессу. А сколько потоков будут ей пользоваться - дело исключительно программиста.

Такого слышу впервые! Вернее, хочу сказать -- то что утверждается в Рихтере, не будет меняться, по очевидным причинам -- очень многие программы перестанут корректно работать, а на это Microsoft никогда не пойдёт!

А насчёт будущих платформ -- в книге Руссиновича-Соломона прочёл, что там по-прежнему все будет базироваться (через разные там заглушки) на традиционном Win32, насколько я понял.


Цитата:
Кстати, на какую книгу Рихтера ссылка идет

Advanced Windows, все издания (их три у нас издавали), классика и must have.
Автор: Mickey_from_nsk
Дата сообщения: 26.04.2006 07:02
TeXpert

Цитата:
А если имел в виду X Window System

Именно.

Цитата:
это не наша тема

Прошу прощения, но я изначально заявлял, что в виндах все сделано не так. Причем я думаю, что сделано не лучшим образом. Понятно, что корни этого тянутся из доса.
Кроме того, данная тема называется "Вопросы программирования на С++", чет я тут не заметил чего то про ОС. Но думаю, эту тему можно закрыть дабы не флудить больше.

Цитата:
Такого слышу впервые! Вернее, хочу сказать -- то что утверждается в Рихтере, не будет меняться, по очевидным причинам -- очень многие программы перестанут корректно работать, а на это Microsoft никогда не пойдёт!

А насчёт будущих платформ -- в книге Руссиновича-Соломона прочёл, что там по-прежнему все будет базироваться (через разные там заглушки) на традиционном Win32, насколько я понял.

Было бы странно, если было бы наоборот.

Цитата:
Advanced Windows, все издания (их три у нас издавали), классика и must have.

Bitte по русски, пожалуйста
Английским, конечно, владею, но при переводе названия книг могут меняться до неузнаваемости. Кое-что Рихтеровское имею и считаю, что книги такого уровня must have by default.
Кстати, возможно кто чего не понял, но по поводу работы с потоками в виндах я имел в виду работу с потоками не в Win32, а в .NET Framework. В самой Win32 в силу примитивности работы с окнами эта проблема, действительно, практически не появляется.
Автор: Zver1992
Дата сообщения: 30.04.2006 11:21
Есть код, http://www.milw0rm.com/exploits/153 . Кто поможет скомпилировать? Никак что-то разобраться не могу. Результат можно на мыло: safronov.aa@gmail.com или выложить на http://www.slil.ru/
Автор: Static
Дата сообщения: 01.05.2006 14:57
Кто программирует на C++ Builder, подскажите такую вещь:
в проге требуется открывать картинку через Image->Picture->LoadFromFile("c:\.....");
Как сделать, чтобы предварительно проверялось наличие этого файла?
Автор: tomegadeth
Дата сообщения: 03.05.2006 15:11
Static

Код:
if(FileExists("c:\\FileName.bmp"))
{
Image->Picture->LoadFromFile("c:\\FileName.bmp");
}
Автор: vshersh
Дата сообщения: 03.05.2006 15:25
tomegadeth
Если не ошибаюсь, то гдето-так:

Код: LPVOID Old;
LPVOID Next;
DWORD SaveSize;
....
(byte)(*(LPVOID)((DWORD)Old + SaveSize)) = 0x09;
(DWORD)(*((LPVOID)((DWORD)Old + SaveSize + 1))) = (DWORD)Next - (DWORD)Old - SaveSize - 5;
....
Автор: distance
Дата сообщения: 03.05.2006 17:55
tomegadeth

Код:
лучше эти монструозные преобразования типов не использовать в открытую, потом сам проблем поимеешь, а спрятать их в define:

#define StoreByte(_buffer,_offset,_data) ...

или немного облагородить...

union Ptr
{
    void* pointer;
    BYTE* bytes;
};
Ptr Old, Next;
DWORD SaveSize;
Old.bytes[SaveSize] = 0x09;
*(DWORD*) &Old.bytes[SaveSize+1] = Next.bytes - Old.bytes - SaveSize - 5;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.