Форум Херсона. Форум Херсонской молодежи, флейм, фотографии Херсона, политика в Херсоне, сетевой форум, сети Херсона


Приветствуем на Форум Херсона. Форум Херсонской молодежи..

На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру!

Если возникнут проблемы с регистрацией напишите нам.

Галерея форума Блоги пользователей Список банов
Вернуться   Форум Херсона. Форум Херсонской молодежи. > > >
Регистрация СправкаСтатистика Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Программирование Все вопросы по написанию программ

Тема: Нужна помощь в освоении программирования Ответить в теме
Ваше имя пользователя: Для входа нажмите здесь
Проверка вопроса системы антиспама "NoSpam!"
Путин кто?
Image Verification
Пожалуйста, введите шесть букв и/или цифр, которые изображены на картинке.

Заголовок:
  
Сообщение:
Иконки для сообщения
Вы можете выбрать иконку, характеризующую сообщение:
 

Дополнительные опции
Другое

Просмотр темы (Новые вначале)
01.11.2017 17:34
VoVaN
Цитата:
Сообщение от PhoeniXX Посмотреть сообщение
хоть это и очередной спам
Цитата:
Сообщение от Switlanka Посмотреть сообщение
Ну почему Вы так решили?
...
Цитата:
Сообщение от Switlanka Посмотреть сообщение
Все же я надеюсь, что воспользовавшись нашими услугами
Штирліц ще ніколи не був таким близьким до цілковитого провалу
27.10.2017 23:21
Switlanka
Цитата:
Сообщение от PhoeniXX Посмотреть сообщение
хоть это и очередной спам, но все же "Люди с международными сертификатами" - сертификат в принципе не о чем не говорит. И когда в рекламе делают ставку именно на сертификатах, это наверняка очередной развод на очередное IT обучение
Ну почему Вы так решили? Я хотела наоборот, чтобы было больше доверия, и обратила на достоинства репетиторов. Вы можете самостоятельно проверить. На сайте реальные люди, при выборе Вы получаете реальные координаты. Если у Вас такие подозрения, подключите к разговору с кандидатом знающего человека, пусть прощупает. А если вдруг - в чем я сомневаюсь - кто-то окажется не тем, за кого себя выдает, сообщите администрации сайта. Хотя все кандидаты проходят тщательную проверку, но возможность ошибки нельзя исключить. Все же я надеюсь, что воспользовавшись нашими услугами, Вы будете довольны и сможете разрешить те проблемы, что стоят перед Вами.
27.10.2017 14:18
PhoeniXX
Цитата:
Сообщение от Switlanka Посмотреть сообщение
Если есть затруднения в пограмировании, можно обратиться к репетитору. Дороговато, конечно, но если толковый наставник, то и наука пойдет быстрее. Програмисты-репетиторы есть на сайте http://repetitor.org.ua/repetitory/programmirovanie Люди с международными сертификатами, опытом работы. Затраты на науку быстро окупятся
хоть это и очередной спам, но все же "Люди с международными сертификатами" - сертификат в принципе не о чем не говорит. И когда в рекламе делают ставку именно на сертификатах, это наверняка очередной развод на очередное IT обучение
27.10.2017 13:41
Switlanka Если есть затруднения в пограмировании, можно обратиться к репетитору. Дороговато, конечно, но если толковый наставник, то и наука пойдет быстрее. Програмисты-репетиторы есть на сайте http://repetitor.org.ua/repetitory/programmirovanie Люди с международными сертификатами, опытом работы. Затраты на науку быстро окупятся
17.10.2016 07:18
olegjack
Цитата:
Сообщение от ПВО Посмотреть сообщение
Та да. .

Я так понимаю, нужно штудировать какие-то книжки по сетям, TCP/IP...
Неисповедимы пути TCP пакетов...
17.10.2016 02:20
VoVaN ну кагбэ если между клиентскими компьютерами есть "прямая видимость" - это банальный клиент-сервер. Ну, т.е. если у всех клиентских машин есть доступный друг для друга ИП-адрес (будь то реальный ИП, или внутрисетевой, если речь тока о работе в локалке). Т.е. на каждом клиентском компутере открыт серверный сокет, на который стучится клиентский сокет с другого клиентского компьютера; оба стучатся на сидящий где-то в интернетах выделенный сервер для получения нужных данных для координации. Как это писать - гугли примеры клиент-серверных приложений, обычно это всякие демки с пересылкой строки текста из одной софтины в другую, на базе этого знания сможешь построить всё остальное.

Хотя вообще-то если всё равно есть общий выделенный сервер к которому все стучатся за координацией... Если объем данных это не терабайты парнушки то проще будет не заморачиваться с изобретением P2P-велосипедов, а пустить через твой сервер и межклиентский трафик. Просто на сервере сидит куча клиентских подключений, сервер пихает клиентам список дескрипторов наличных подключений, а клиенты по надобности шлют на сервер блоки данных с пометкой какому из клиентов их нужно передать.

С третьей стороны, как сказал Олег, нафиг изобретать велосипеды вообще не обязательно. Можно с таким же успехом заюзать уже сто лет назад изобретенные почтовые и файловые серверы (а то и даже вообще левые халявные серверы. Но то уже по вкусу), устроив всё что нужно поверх них.
16.10.2016 23:45
ПВО
Цитата:
Сообщение от rezonat3 Посмотреть сообщение
это та же задача двухлетней давности?
Та да. .

Я так понимаю, нужно штудировать какие-то книжки по сетям, TCP/IP...
16.10.2016 23:34
rezonat3
Цитата:
Сообщение от ПВО Посмотреть сообщение
Мне нужно написать программу под виндовс. Программа должна работать через интернет и связывать компьютеры пользователей напрямую. Какой язык выбрать?

У меня сейчас стоит визуал студио 2008. Книжек, по которым можно быстро освоиться не нашел. Давно раньше программировал на паскале и с++.
это та же задача двухлетней давности?
16.10.2016 23:17
ustas Процедуры нет, но задача типичная, банально стоит смотреть в сторону древних месседжеров типа miranda, icq и сколько уже напилено за много лет примеров на эту тему.
16.10.2016 17:29
PhoeniXX нет такой магической процедуры которая сделает все это сразу. это слишком не типичная задача.
16.10.2016 15:22
ПВО Я сам не знаю - как это называется. Мне нужно, чтобы программа на одном компьютере связывалась напрямую с такой же программой на другом компьютере в сети. Каждый комп в сети должен иметь свой уникальный адрес, чтобы к нему можно было обращаться. Что это за адресация, какие есть процедуры в языках программирования для реализации таких возможностей?
16.10.2016 14:46
olegjack Как то совсем непонятно что нужно. Выделенный IP, PPTP поднять или сервисы типа dyndns, noip.
Чем старые добрые почтовые и фтп протоколы неподходят?
16.10.2016 13:29
ПВО Новая задача.

Нужно, чтобы один компьютер напрямую соединялся с другим компьютером в интернете и передавал данные. Для этого компьютер, который вышел в сеть, должен оставлять свои идентификационные данные (или как они называются?) на сайте в сети. А другой компьютер мог брать эти данные и напрямую связываться с первым компьютером.

Что-то вроде связи торрент-трекеров.

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

Может кто подскажет - где искать ответы?
30.05.2015 14:52
ПВО wouldnt_even, ну, все тривиальные задачи давно уже решены. Остается ходить по неведомым дорожкам
01.05.2015 09:02
wouldnt_even "забить нужным кодом" - чушь какая-то. без оглядки на размер памяти? объем кода? просто забить? что надо доказать шефу, что на компе мало памяти и нужен апгрейд? или неуклюжая попытка написать вирус?
30.04.2015 22:46
ПВО На сейчас задача такая - забить не используемую область озу нужным кодом и оставить ее в свободном доступе.: По идее, тут самое место что то типа прямому доступу к памяти, просто я когда искал инфу, то ничего нужного не нашел. Мой код, это просто попытка выкрутиться.
30.04.2015 18:15
Lester
Цитата:
Сообщение от PhoeniXX Посмотреть сообщение
Опять же, это private память, а не shared, и таким образом процесс просто будет забирать свободную память у системы(наверняка файловый кэш), и все остальные процессы начнут активно свапиться, и как следствие все приложения начнут тупить.
И потому очень интересно - а что за задача вообще будет решаться таким способом. Возможно подойдет банальная СУБД с shared cache, например, berkeley db или sqlite.
30.04.2015 18:09
Школьник
30.04.2015 18:07
PhoeniXX
Цитата:
Сообщение от ПВО Посмотреть сообщение

Код:
                if ( i+100 < arrlenght )
                {
//                  stringArray[i - 1] = textBox1.Text; // Сначала я записывал строку в массив
                    for (int n = 0; n < 100; n++) { str = str + textBox1.Text; } // Потом дописывал строку в переменную стринг
                    i = i + 100;
                }
Так как в массив строк stringArray сохраняется тот же экземпляр строки, то новую память он не использует, а просто создаёт новые ссылки на ту же строку. И как следствие испольуземые память растёт очень медленно - по 4\8 байт за проход.

Во втором случае с str = str + textBox1.Text - да, тут память используется активнее, но так как промежуточные состояния переменной str нигде не сохраняются, то и они очень быстро уничтожаются GC в процессе работы метода.

При данном подходе компромиссом будет где-то такое внутри цикла, который будет выполнять этот кусок для каждого элемента массива:

Код:
str = str + textBox1.Text; 
stringArray[i - 1] = str;
Ну и плюс, если нужно занимать определённое кол-во памяти, тогда вместо textBox1.Text должно быть значение в коде, чтобы можно было посчитать размер памяти используемый в процессе.

Опять же, это private память, а не shared, и таким образом процесс просто будет забирать свободную память у системы(наверняка файловый кэш), и все остальные процессы начнут активно свапиться, и как следствие все приложения начнут тупить.
30.04.2015 17:55
ПВО Ребята, вы точно наши, а не из гарварда пишите?

Привожу код, а в комментарии еще буду вникать.

В целом так:

1. Определяем размер свободной части ОЗУ
2. Высчитываем, сколько туда поместится строк текста
3. Если процессор не загружен, записываем в переменную строку


Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace mg
{
    public partial class Form1 : Form
    {
        PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
        PerformanceCounter cpuCounter = new PerformanceCounter();
        int cpucnt;
        string[] stringArray;
        string str;
        int arrlenght;
        int ramfree;
        int i = 1;

        public Form1()
        {
            InitializeComponent();
            cpuCounter.CategoryName = "Processor";
            cpuCounter.CounterName = "% Processor Time";
            cpuCounter.InstanceName = "_Total";
            str = textBox1.Text;
            ramfree = (int)ramCounter.NextValue();
            label_memory.Text = ramfree+"MB";
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked) timer1.Enabled = true; else timer1.Enabled = false;
            textBox1.Text = str;
        }

        private void timer1_Tick(object sender, EventArgs e) // Каждые 10 милисекунд дописываем строку в память
        {
            cpucnt = (int)cpuCounter.NextValue(); // Определяем загрузку процессора
            if (cpucnt < 35)
            {
                arrlenght = (int)ramfree*1024*1024 / (textBox1.Text.Length*2+10); // Определяем - сколько в памяти поместится нужных строк
                arrlenght = (int)arrlenght / 10;
//                stringArray = new string[arrlenght];
                label_arr.Text = "Допуст. кол. в массиве: " + arrlenght.ToString();
                label_txt_nb.Text = textBox1.Text.Length.ToString();

                if ( i+100 < arrlenght )
                {
//                  stringArray[i - 1] = textBox1.Text; // Сначала я записывал строку в массив
                    for (int n = 0; n < 100; n++) { str = str + textBox1.Text; } // Потом дописывал строку в переменную стринг
                    i = i + 100;
                }

//                stringArray = null;
               
                if (i >= arrlenght) { i = 1;  str = null; }
            }
        }

        private void timer_renew_Tick(object sender, EventArgs e) // Каждую секунду обновляем показания на форме
        {
                label_cpu.Text = cpucnt + "%";
                    label_i.Text = "i = " + i;
                ramfree = (int)ramCounter.NextValue();
                label_free_2.Text = ramfree+"MB";

        }
    }
}
29.04.2015 13:06
Lester
Цитата:
Сообщение от PhoeniXX Посмотреть сообщение
Если его раскомментировать, но даже не выполнять заполнение массива, тогда он заалокейтит 1гб памяти.
Значит компилятор C# не умеет в оптимизацию, т.к. такое тоже можно выкидывать

PHP код:
~$ cat ./test.cpp 
#include <vector>

int main()
{
    
std::vector<intv1024 1024 1024 );
    for( 
int)
        
0;
}
~$ 
clang++-libc++ -std=c++11 -Ofast -./test.cpp 
~$ cat ./test.s
    
.text
    
.file    "./test.cpp"
    
.globl    main
    
.align    160x90
    
.type    main,@function
main:                                   # @main
    
.cfi_startproc
# BB#0:
    
xorl    %eax, %eax
    retq
.Lfunc_end0:
    .
size    main, .Lfunc_end0-main
    
.cfi_endproc


    
.ident    "Ubuntu clang version 3.7.0-svn235834-1~exp1 (trunk) (based on LLVM 3.7.0)"
    
.section    ".note.GNU-stack","",@progbits 
Впрочем у него "медленно все происходило", а значит таки что-то делалось. В общем нужен код.
29.04.2015 12:17
PhoeniXX
Цитата:
Сообщение от ПВО Посмотреть сообщение
Я пробовал на си шарп что то делать, - смотрел размер свободной паияти, записывал в большую матрицу данные, и смотрел опять размер свободной памяти, но она как была свободной, так и оставалась. К тому же медленно все происходило.
Простой пример:

Код:
			
const int count = 1024*1024*1024/sizeof(int);
Console.ReadLine();
int[] q = new int[count];

//for (int index = 0; index < q.Length; index++)
//{
//	q[index] = 0;
//}
Console.ReadLine();
Но тут есть момент, если код ниже так и останется закоментированным, то компилятор вырежет не используемые переменную, и память использована не будет. Если его раскомментировать, но даже не выполнять заполнение массива, тогда он заалокейтит 1гб памяти. Но это Private memory, а не Shared.

GC может вполне и в процессе работы метода вмешаться и удалить не используемые данные. Только опять же это будет private память, и она будет доступна только этому процессу.

В чем практическая ценность задачи? Зачем нужна такая логика?
29.04.2015 12:02
Lester
Цитата:
Сообщение от wouldnt_even Посмотреть сообщение
я могу ошибаться, но это вполне может быть результат работы garbage collector'a. то есть объекты, к которым нет обращения, уничтожаются. я допускаю, что если создан огромный массив, к торому потом нет никакого референса, довольно быстро уничтожается. а долго это могло происходить, если массив больше свободной памяти, поэтому задействовался своп.
Я по описанию предположил, что он смотрел прямо в процессе работы, а значит GC не должен был еще отработать. И если память оставалась свободной - до сильного свопинга дойти было не должно, кроме того значит реально много памяти и не нужно было. Хотя да, это я начал гадать, тут надо все спрашивать у автора - сколько памяти процесс использовал, как и когда он смотрел, реально ли матрица большая, как именно она заполнялась и пр.
29.04.2015 04:58
wouldnt_even
Цитата:
Сообщение от Lester Посмотреть сообщение
"и смотрел опять размер свободной памяти, но она как была свободной, так и оставалась" - значит рантайм C# изначально запросил достаточно памяти для размещения новых данных. Это делается для оптимизации. Даже банальный malloc большей частью занимается просто "нарезанием", а не вызовом syscall mmap на каждый чих. Ну или смотреть использование памяти было надо не там.
я могу ошибаться, но это вполне может быть результат работы garbage collector'a. то есть объекты, к которым нет обращения, уничтожаются. я допускаю, что если создан огромный массив, к торому потом нет никакого референса, довольно быстро уничтожается. а долго это могло происходить, если массив больше свободной памяти, поэтому задействовался своп.
29.04.2015 04:19
Lester
Цитата:
Сообщение от ПВО Посмотреть сообщение
Есть такая задача... нужно в не используемую оперативную память записывать нужный код и оставлять это свободным для использования. Другими словами, определяем место в озу, которое не испол.дается в данный момент, его заполняем кодом, и оставляем к нему доступ других программ, то есть, не используемая память должна содержать определенный код

Интересует вопрос - можно ли такое в принципе сделать? Насколько это сложно или сколько это может стоить?

Я пробовал на си шарп что то делать, - смотрел размер свободной паияти, записывал в большую матрицу данные, и смотрел опять размер свободной памяти, но она как была свободной, так и оставалась. К тому же медленно все происходило.

"оставляем к нему доступ других программ" - очевидно речь идет о shared memory. Вот дока для C#:

https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx

"определяем место в озу, которое не испол.дается в данный момент, его заполняем кодом" - типичное поведение ОС для файлового кэша. А эффективно реализовать такое же на уровне процесса в user space не получится. Так что просто пишем сколько нужно, а ОС разрулит. Это если речь не идет о регулярной передаче и обновлении гигабайт данных, тогда задача изначально решается неверно.

"и смотрел опять размер свободной памяти, но она как была свободной, так и оставалась" - значит рантайм C# изначально запросил достаточно памяти для размещения новых данных. Это делается для оптимизации. Даже банальный malloc большей частью занимается просто "нарезанием", а не вызовом syscall mmap на каждый чих. Ну или смотреть использование памяти было надо не там.
29.04.2015 02:39
ПВО Есть такая задача... нужно в не используемую оперативную память записывать нужный код и оставлять это свободным для использования. Другими словами, определяем место в озу, которое не испол.дается в данный момент, его заполняем кодом, и оставляем к нему доступ других программ, то есть, не используемая память должна содержать определенный код

Интересует вопрос - можно ли такое в принципе сделать? Насколько это сложно или сколько это может стоить?

Я пробовал на си шарп что то делать, - смотрел размер свободной паияти, записывал в большую матрицу данные, и смотрел опять размер свободной памяти, но она как была свободной, так и оставалась. К тому же медленно все происходило.
09.01.2015 20:19
ПВО вот так работает:
Код:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace forvard
{
    public partial class Form1 : Form
    {
         Form2 f2;
        public Form1()
        {
            InitializeComponent();
            f2 = new Form2();
            f2.FormClosing += delegate { f2_Closing(); };
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            f2.ShowDialog();

        }
        void f2_Closing()
        {
            MessageBox.Show("For2 is closing now!");
        }
    }
}
пока это устраивает, буду на этой основе дальше кодить.

Почесав затылок, юзер дописал через 8 минут
Цитата:
Сообщение от PhoeniXX Посмотреть сообщение
Код должен находится внутри метода, а тут идёт описание класа, в нём два метода, и кусок кода который относится непонятно к чему, и не понятно когда он должен вызываться.
ну вот, теперь в голове все сложилось - классы и методы
09.01.2015 19:58
PhoeniXX
Цитата:
Сообщение от ПВО Посмотреть сообщение
Попытка открыть вторую форму Form2
Код:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace forvard
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Form2 f2 = new Form2();
        f2.Closing += form2_Closing; // оно будет вызвано когда форма будет закрываться
        f2.Show();

        private void f2_Closing(object sender, CancelEventArgs e)
        {
        }
    }
}
Выдает ошибку:

У меня визуал студио 2008.
Ну да. Код должен находится внутри метода, а тут идёт описание класа, в нём два метода, и кусок кода который относится непонятно к чему, и не понятно когда он должен вызываться.

Потом метод снизу называется f2_Closing, а в подписывании указано:
f2.Closing += form2_Closing; . Метод должен же быть одним и тем же. А так описан метод f2_Closing, а попытка использования form2_Closing, которого тут нету.

Должно быть хотя бы где-то так, хотя в данном случае форма будет открываться при запуске основной формы:

Код:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace forvard
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Form2 f2 = new Form2();
            f2.Closing += f2_Closing; // оно будет вызвано когда форма будет закрываться
            f2.Show();
        }

        private void f2_Closing(object sender, CancelEventArgs e)
        {
        }
    }
}
09.01.2015 18:36
ПВО Попытка открыть вторую форму Form2
Код:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace forvard
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Form2 f2 = new Form2();
        f2.Closing += form2_Closing; // оно будет вызвано когда форма будет закрываться
        f2.Show();

        private void f2_Closing(object sender, CancelEventArgs e)
        {
        }
    }
}
Выдает ошибку:
Цитата:
Invalid token '+=' in class, struct, or interface member declaration
У меня визуал студио 2008.
05.01.2015 22:41
PhoeniXX
Цитата:
Сообщение от ПВО Посмотреть сообщение
Ставлю чекбокс, при отметке которого запускается таймер. При срабатывании таймера нужно открыть окошко с предупреждением о переводе в спящий режим. Пробовал MessageBox, но он не показывается поверх всех окон.
Ну да, это ж модальное окно. А оно и должно быть открыто поверх текущего окна, которое его открыло.
Цитата:
Сообщение от ПВО Посмотреть сообщение
Пробовал вторую форму открывать, но не могу оттуда передать параметр в первую, что вторую закрыл пользователь.
Типа такого должно работать:

Код:
MyPopupForm form = new MyPopupForm();
form.Closing += form_Closing; // оно будет вызвано когда форма будет закрываться
form.Show();

private void form_Closing(object sender, CancelEventArgs e)
{
    MyPopupForm form = (MyPopupForm) sender;
    string myParameter = form.MyCustomParameter; // это свойство новой формы, в которую можно сохранить нужный параметр
    // ну и дальше его можно использовать
}
Цитата:
Сообщение от ПВО Посмотреть сообщение
А еще, когда форма не видна на экране, перестает работать таймер.
Таймер должен работать не зависимо от видимости окошка. Если только окно не было закрыто.

А вообще, если есть вопросы, то нужно и код какой-то показывать, так как отвечать на вопросы без кода это как гадание на кофейной гуще.
В этой теме более 30 ответов(а). Нажмите здесь, чтобы перезагрузить эту тему.

Ваши права в разделе
Вы не можете создавать темы
Вы можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.

Время на сервере: 18:27.

Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

vBulletin 3, Copyright © 2000-2017, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co