Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Время между кликами 
:(
    Опции темы
PsiMagistr
Дата 3.5.2020, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Ребята,

Как правильно рассчитать время между кликами мыши в миллисекундах в C#? Если набегают секунды, они должны переводиться в миллисекунды.

Это сообщение отредактировал(а) PsiMagistr - 3.5.2020, 12:33


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
THandle
Дата 4.5.2020, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 1
Всего: 372



Привет.

Ну смотри, у тебя есть какая-то переменная, допустим previousDate типа DateTime, в ней ты хранишь время предыдущего клика.
Тогда в обработчике клика можно написать что-то вроде:

Код

            // Получаем текущую дату/время
            DateTime now = DateTime.Now;
            // Вычисляем разницу времени между датой предыдущего клика и текущего
            TimeSpan difference = now.Subtract(previousDate);
            // Теперь обновляем время предыдущего клика
            previousDate = now;


Соответственно разница у тебя будет храниться в переменной difference типа TimeSpan. Чтобы выразить эту разницу в миллисекундах, тебе нужно свойство difference.TotalMilliseconds.

Думаю, как-то так)
PM   Вверх
PsiMagistr
Дата 4.5.2020, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Цитата(THandle @ 4.5.2020,  01:06)
Привет.

Ну смотри, у тебя есть какая-то переменная, допустим previousDate типа DateTime, в ней ты хранишь время предыдущего клика.
Тогда в обработчике клика можно написать что-то вроде:

Код

            // Получаем текущую дату/время
            DateTime now = DateTime.Now;
            // Вычисляем разницу времени между датой предыдущего клика и текущего
            TimeSpan difference = now.Subtract(previousDate);
            // Теперь обновляем время предыдущего клика
            previousDate = now;


Соответственно разница у тебя будет храниться в переменной difference типа TimeSpan. Чтобы выразить эту разницу в миллисекундах, тебе нужно свойство difference.TotalMilliseconds.

Думаю, как-то так)

Спасибо большое за помощь!

При попытке вывести это тотальные миллисекунды в строку получаю нечто вроде:

544,2344.

Как мне это трактовать? Он до деститысячных миллисекунды считает? Вот это точность.

Вот код. flag - это просто булевское свойство.

Код

private void button2_Click(object sender, EventArgs e)
        {
            if (flag)
            {
                d1 = DateTime.Now;
                flag = false;
            }
            else
            {
                d2 = DateTime.Now;
                TimeSpan difference = d2.Subtract(d1);
                MessageBox.Show(difference.TotalMilliseconds.ToString());
                d1 = DateTime.Now;
            }







Это сообщение отредактировал(а) PsiMagistr - 4.5.2020, 09:09


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
THandle
Дата 4.5.2020, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 1
Всего: 372



Цитата(PsiMagistr @  4.5.2020,  09:47 Найти цитируемый пост)
Как мне это трактовать? Он до деститысячных миллисекунды считает? Вот это точность.


Да, все так  smile 

Ну а так, всегда можно округлить или отбросить дробную часть, если она не нужна.
PM   Вверх
PsiMagistr
Дата 4.5.2020, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Цитата(THandle @ 4.5.2020,  15:28)
Цитата(PsiMagistr @  4.5.2020,  09:47 Найти цитируемый пост)
Как мне это трактовать? Он до деститысячных миллисекунды считает? Вот это точность.


Да, все так  smile 

Ну а так, всегда можно округлить или отбросить дробную часть, если она не нужна.

Аха, спасибо большое.

Пишу одноразовый шифроблокнот. Для генерации ключей понадобились случайные числа. Не какие-нибудь псевдослучайные, а истинно случайные.
Что делать? Раскопал RNGCryptoServiceProvider и создал с его помощью генератор криптографически случайных.
Этого показалось мало, сделал ручной кликабельный генератор - фиксируются координаты клика мыши, время между двумя кликами и на основе группы кликов создаются разный начальный seed для псевдогенератора Random. Каждый новый щелчок - новый seed, новая группа чисел.

Пойдет такое?

Продолжаем извлекать хаос из детерминированного источника... )))



--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
THandle
Дата 4.5.2020, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 1
Всего: 372



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

На мой взгляд того же RNGCryptoServiceProvider вполне хватило бы)

Или это просто желание попробовать разные ручные варианты?

Цитата(PsiMagistr @  4.5.2020,  16:51 Найти цитируемый пост)
Не какие-нибудь псевдослучайные, а истинно случайные.


Ну все равно вся эта история по сути псевдослучайна, просто у тебя в качестве "шума" используются координаты и время клика.
PM   Вверх
PsiMagistr
Дата 5.5.2020, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Цитата(THandle @ 4.5.2020,  17:48)
Честно говоря, мне кажется, это какой-то довольно странный способ генерации случайных чисел)

На мой взгляд того же RNGCryptoServiceProvider вполне хватило бы)

Или это просто желание попробовать разные ручные варианты?

Цитата(PsiMagistr @  4.5.2020,  16:51 Найти цитируемый пост)
Не какие-нибудь псевдослучайные, а истинно случайные.


Ну все равно вся эта история по сути псевдослучайна, просто у тебя в качестве "шума" используются координаты и время клика.

Может быть и странный. Вот он.

х, у - координаты указателя.
d1, d2 - засекатели времени.
flag - булева переменная.

Код

 public StringBuilder getMouseRandom(int x, int y)
        {
            int count = x + y;            
            if(count % 10 == 0)
            {
                count = 10;
            }
            else
            {
                count = count % 10;
            }
            if (flag)
            {
                d1 = DateTime.Now;
                flag = false;
                this.Seed = x * y * DateTime.Now.Millisecond;
            }
            else
            {
                d2 = DateTime.Now;
                TimeSpan difference = d2.Subtract(d1);
                this.Seed = (int)difference.TotalMilliseconds;                
                d1 = DateTime.Now;
            }                        
            int num = 0;
            StringBuilder s = new StringBuilder();
            Random R = new Random(this.Seed * x * y);
            for (int i = 0; i < count; i++)
            {
                num = R.Next(10);
                s.Append(num);               
            }
            return s;
        }


Добавлено через 2 минуты и 51 секунду
А это случайное число от мин до макс через RNGCryptoServiceProvider.

Код

 public int getSecurityRandom(int min, int max)
        {
            uint scale = uint.MaxValue;
            using (this.Rand = new RNGCryptoServiceProvider())
            {
                while (scale == uint.MaxValue)
                {
                    // Get four random bytes.
                    byte[] four_bytes = new byte[4];
                    Rand.GetBytes(four_bytes);
                    // Convert that into an uint.
                    scale = BitConverter.ToUInt32(four_bytes, 0);
                }
            }           

            // Add min to the scaled difference between max and min.
            return (int)(min + (max - min) * (scale / (double)uint.MaxValue));
        }


Добавлено через 6 минут
Шут с этой истинной случайностью, а насколько это криптостойко?

Оба способа.

Как Вам кажется?


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
THandle
Дата 5.5.2020, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 1
Всего: 372



На мой взгляд, оба варианта одинаковы в плане криптостойкости) в качестве seedа используется же конструкция одного и того же типа, просто полученная немного разными псевдослучайными путями.
Вопрос в том, какой результат нужно получить. Я придерживаюсь того, что в подавляющем большинстве случаев не стоит придумывать велосипед, а лучше использовать готовые решения, в том числе и в криптографии.

Если интересна криптография, я бы наверное посоветовал пройти вот этот вот курс.
PM   Вверх
PsiMagistr
Дата 5.5.2020, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Цитата(THandle @ 5.5.2020,  14:50)
На мой взгляд, оба варианта одинаковы в плане криптостойкости) в качестве seedа используется же конструкция одного и того же типа, просто полученная немного разными псевдослучайными путями.

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

Спасибо огромное!

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


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
THandle
Дата 5.5.2020, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 1
Всего: 372



Цитата(PsiMagistr @  5.5.2020,  18:34 Найти цитируемый пост)
А вариант с шумом от мышиного х-у не очень? 


Ну в случае если хочется самому попробовать, то почему бы и нет. Пробовать надо, это дело хорошее  smile 
PM   Вверх
PsiMagistr
Дата 5.5.2020, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Цитата(THandle @ 5.5.2020,  17:41)
Цитата(PsiMagistr @  5.5.2020,  18:34 Найти цитируемый пост)
А вариант с шумом от мышиного х-у не очень? 


Ну в случае если хочется самому попробовать, то почему бы и нет. Пробовать надо, это дело хорошее  smile

Я вшил оба способа генерирования. Плюс хочу шифротаблицы читать из текстовых файлов.

Я так понимаю даже криптостойкий генератор требованию истинной случайности не отвечает?
Истинная это только на аппаратном уровне решается, да? Типа счетчика Гейгеоа, шумовых замеров, или там датчиков атмосферного давления?
Или я не прав?




--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
THandle
Дата 7.5.2020, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 1
Всего: 372



Ну истинная случайность может порождаться только некими квантовыми процессами, на сколько я помню.
Да и не думаю что для подобного рода задач нужна "истинная" случайность.
Вполне хватит случайности на основе разных составляющих факторов. Хочется мышку и время - пусть так)

Как интересно тема перешла из разницы между датами в дискуссию о случайностях)
Жаль, что на Винграде осталось так мало живых участников(

PsiMagistr, успехов в реализации!)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.