C#, Почему частоты таймера чрезвычайно прочь?

Поскольку вы не правильно описали свой вопрос или не предоставили никакого кода. Итак, я взял на себя ваш вопрос и отправил свой ответ. Выполните шаг.

1) Для загрузки изображения

<form method='POST' action='UploadImage.php' enctype="multipart/form-data">
    <input type='file' name='UploadImage'>
    <input type='submit' value="submit">
</form>

Предположим, что ваше имя папки проекта: MyProject (где все файлы проекта присутствуют), Сделайте одну папку внутри Папка «MyProject», а именно «MyUploadImages» Теперь

UploadImage.php

<?php
include('connect.php'); // Do Database Connection in this file (create a file namely connect.php inside MyProject Folder)
extract($_POST);

$UploadedFileName=$_FILES['UploadImage']['name'];
if($UploadedFileName!='')
{
  $upload_directory = "MyUploadImages/"; //This is the folder which you created just now
  $TargetPath=time().$UploadedFileName;
  if(move_uploaded_file($_FILES['files']['tmp_name'], $upload_directory.$TargetPath)){    
    $QueryInsertFile="INSERT INTO TableName SET ImageColumnName='$TargetPath'"; 
    // Write Mysql Query Here to insert this $QueryInsertFile   .                   
  }
}
?>

Теперь, в вашей таблице базы данных вы можете найти ImageColumnName, что путь изображения установлен как MyUploadImages / 1417Flower .jpg

2) Retreiving Image из базы данных

AnyPage.php

<?
$Query="SELECT * FROM TableName";
// Write mysql query to fetch $Query

store that ImageColumnName value to any variable say $MyPhoto.
?>

<img src="<?echo $MyPhoto;?>">
14
задан Daniel Wolf 6 January 2009 в 14:22
поделиться

10 ответов

Ну, я получаю другое число до 100 Гц на самом деле, с некоторыми большими отклонениями, но в большинстве случаев ближе к требуемому числу (рабочий XP SP3 с новым SPS.NET).

Система. Таймер. Таймер реализован с помощью Системы. Поточная обработка. Таймер, таким образом, это объясняет, почему Вы видите те же результаты. Я предполагаю, что таймер реализован с помощью некоторого алгоритма планирования и т.д. (это - внутренний вызов, возможно, смотрение на Ротор 2.0 могло бы пролить некоторый свет на него).

я предложил бы реализовать своего рода таймер с помощью другого потока (или комбинация этого) называющий Сон и обратный вызов. Не уверенный в результате все же.

Иначе Вы могли бы смотреть на мультимедийные таймеры (PInvoke).

3
ответ дан 1 December 2019 в 06:43
поделиться

Похоже, что Ваши фактические частоты таймера составляют 63,9 Гц или целочисленные кратные числа этого.

, Который подразумевал бы разрешение таймера приблизительно 15 мс (или целочисленные кратные числа therefof, т.е. 30 мс, 45 мс, и т.д.).

Это, таймеры на основе целочисленных кратных чисел 'галочки', должно ожидаться (в DOS, например, значение 'галочки' составляло 55 мс / 18 Гц).

я не знаю, почему Вашим количеством галочки являются 15,65 Mec вместо даже 15 мс. Как эксперимент, что, если Вы спите для нескольких msec в обработчике таймеров: мы могли бы видеть 15 мс между галочками, и 0,65 мс в Вашем обработчике таймеров в каждой галочке?

4
ответ дан 1 December 2019 в 06:43
поделиться

Эти классы не предназначаются для использования в реальном времени и подвергаются динамической природе планирования операционной системы как Windows. При необходимости в выполнении в реальном времени, Вы, вероятно, хотели бы посмотреть на некоторые встроенные аппаратные средства. Я не на 100% уверен, но я думаю, что .netcpu может быть версией в реальном времени меньшего времени выполнения.NET на микросхеме.

http://www.arm.com/markets/emerging_applications/armpp/8070.html

, Конечно - необходимо оценить, как важная точность тех интервалов состоит в том, учитывая, что код, присоединенный к ним, будет выполнением в неоперационной системе реального времени. Если, конечно, это не чисто академический вопрос (в этом случае - да это интересно! :P).

5
ответ дан 1 December 2019 в 06:43
поделиться

При использовании winmm.dll, можно использовать больше процессорного времени, но иметь лучший контроль.

Вот Ваш пример, измененный для использования таймеров winmm.dll

const String WINMM = "winmm.dll";
const String KERNEL32 = "kernel32.dll";

delegate void MMTimerProc (UInt32 timerid, UInt32 msg, IntPtr user, UInt32 dw1, UInt32 dw2);

[DllImport(WINMM)]
static extern uint timeSetEvent(
      UInt32            uDelay,      
      UInt32            uResolution, 
      [MarshalAs(UnmanagedType.FunctionPtr)] MMTimerProc lpTimeProc,  
      UInt32            dwUser,      
      Int32             fuEvent      
    );

[DllImport(WINMM)]
static extern uint timeKillEvent(uint uTimerID);

// Library used for more accurate timing
[DllImport(KERNEL32)]
static extern bool QueryPerformanceCounter(out long PerformanceCount);
[DllImport(KERNEL32)]
static extern bool QueryPerformanceFrequency(out long Frequency);

static long CPUFrequency;

static int count;

static void Main(string[] args)
{            
    QueryPerformanceFrequency(out CPUFrequency);

    int[] frequencies = { 5, 10, 15, 20, 30, 50, 75, 100, 200, 500 };

    foreach (int freq in frequencies)
    {
        count = 0;

        long start = GetTimestamp();

        // start timer
        uint timerId = timeSetEvent((uint)(1000 / freq), 0, new MMTimerProc(TimerFunction), 0, 1);

        // wait 10 seconds
        while (DeltaMilliseconds(start, GetTimestamp()) < 10000)
        {
            Thread.Sleep(1);
        }

        // end timer
        timeKillEvent(timerId);

        Console.WriteLine("Requested frequency: {0}\nActual frequency: {1}\n", freq, count / 10);
    }

    Console.ReadLine();
}

static void TimerFunction(UInt32 timerid, UInt32 msg, IntPtr user, UInt32 dw1, UInt32 dw2)
{
    Interlocked.Increment(ref count);
}

static public long DeltaMilliseconds(long earlyTimestamp, long lateTimestamp)
{
    return (((lateTimestamp - earlyTimestamp) * 1000) / CPUFrequency);
}

static public long GetTimestamp()
{
    long result;
    QueryPerformanceCounter(out result);
    return result;
}

И вот вывод, который я получаю:

Requested frequency: 5
Actual frequency: 5

Requested frequency: 10
Actual frequency: 10

Requested frequency: 15
Actual frequency: 15

Requested frequency: 20
Actual frequency: 19

Requested frequency: 30
Actual frequency: 30

Requested frequency: 50
Actual frequency: 50

Requested frequency: 75
Actual frequency: 76

Requested frequency: 100
Actual frequency: 100

Requested frequency: 200
Actual frequency: 200

Requested frequency: 500
Actual frequency: 500

Надеюсь, это поможет.

23
ответ дан 1 December 2019 в 06:43
поделиться

Windows (и поэтому.NET, работающая сверху его), является заблаговременно многозадачной операционной системой. Любой данный поток может быть остановлен в любое время другим потоком, и если поток вытеснения не будет вести себя правильно, то Вы не вернете управление, когда Вы захотите это или потребность это.

, Что, короче говоря то, почему, как можно гарантировать, не получите точные синхронизации, и почему Windows и.NET являются неподходящими платформами для определенных типов программного обеспечения. Если жизни в опасности, потому что Вы не получаете контроль ТОЧНО, когда Вы хотите его, выбираете другую платформу.

3
ответ дан 1 December 2019 в 06:43
поделиться

Если действительно необходимо сделать переход к среде реального времени, я использовал RTX в прошлом, когда детерминированная выборка была необходима (от пользовательского последовательного устройства) и везла очень с ним.

http://www.pharlap.com/rtx.htm

2
ответ дан 1 December 2019 в 06:43
поделиться

Существует много причин что частоты таймера прочь. Пример с аппаратными средствами, тот же поток занят другой обработкой и так далее...

, Если Вы хотите более точно время, используйте класс Секундомера в Системе. Пространство имен диагностики.

1
ответ дан 1 December 2019 в 06:43
поделиться

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

0
ответ дан 1 December 2019 в 06:43
поделиться

Часть проблемы - то, что Таймеры имеют два задержки для учета. Это может варьироваться в зависимости от того, как таймер реализован в ОС.

  1. время, когда Вы запрашиваете ожидать
  2. время между тем, когда № 1 происходит и процесс получает свою очередь в очереди планирования.

таймер имеет хороший контроль над № 1, но почти никакое управление № 2. Это может предупредить ОС, что хотело бы работать снова, но ОС свободна разбудить его, когда похоже на него.

0
ответ дан 1 December 2019 в 06:43
поделиться

Вот хорошая реализация таймера, использующего мультимедийный таймер http://www.softwareinteractions.com/blog/2009 /12/7/using-the-multimedia-timer-from-c.html

2
ответ дан 1 December 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: