Поскольку вы не правильно описали свой вопрос или не предоставили никакого кода. Итак, я взял на себя ваш вопрос и отправил свой ответ. Выполните шаг.
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;?>">
Ну, я получаю другое число до 100 Гц на самом деле, с некоторыми большими отклонениями, но в большинстве случаев ближе к требуемому числу (рабочий XP SP3 с новым SPS.NET).
Система. Таймер. Таймер реализован с помощью Системы. Поточная обработка. Таймер, таким образом, это объясняет, почему Вы видите те же результаты. Я предполагаю, что таймер реализован с помощью некоторого алгоритма планирования и т.д. (это - внутренний вызов, возможно, смотрение на Ротор 2.0 могло бы пролить некоторый свет на него).
я предложил бы реализовать своего рода таймер с помощью другого потока (или комбинация этого) называющий Сон и обратный вызов. Не уверенный в результате все же.
Иначе Вы могли бы смотреть на мультимедийные таймеры (PInvoke).
Похоже, что Ваши фактические частоты таймера составляют 63,9 Гц или целочисленные кратные числа этого.
, Который подразумевал бы разрешение таймера приблизительно 15 мс (или целочисленные кратные числа therefof, т.е. 30 мс, 45 мс, и т.д.).
Это, таймеры на основе целочисленных кратных чисел 'галочки', должно ожидаться (в DOS, например, значение 'галочки' составляло 55 мс / 18 Гц).
я не знаю, почему Вашим количеством галочки являются 15,65 Mec вместо даже 15 мс. Как эксперимент, что, если Вы спите для нескольких msec в обработчике таймеров: мы могли бы видеть 15 мс между галочками, и 0,65 мс в Вашем обработчике таймеров в каждой галочке?
Эти классы не предназначаются для использования в реальном времени и подвергаются динамической природе планирования операционной системы как Windows. При необходимости в выполнении в реальном времени, Вы, вероятно, хотели бы посмотреть на некоторые встроенные аппаратные средства. Я не на 100% уверен, но я думаю, что .netcpu может быть версией в реальном времени меньшего времени выполнения.NET на микросхеме.
http://www.arm.com/markets/emerging_applications/armpp/8070.html
, Конечно - необходимо оценить, как важная точность тех интервалов состоит в том, учитывая, что код, присоединенный к ним, будет выполнением в неоперационной системе реального времени. Если, конечно, это не чисто академический вопрос (в этом случае - да это интересно! :P).
При использовании 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
Надеюсь, это поможет.
Windows (и поэтому.NET, работающая сверху его), является заблаговременно многозадачной операционной системой. Любой данный поток может быть остановлен в любое время другим потоком, и если поток вытеснения не будет вести себя правильно, то Вы не вернете управление, когда Вы захотите это или потребность это.
, Что, короче говоря то, почему, как можно гарантировать, не получите точные синхронизации, и почему Windows и.NET являются неподходящими платформами для определенных типов программного обеспечения. Если жизни в опасности, потому что Вы не получаете контроль ТОЧНО, когда Вы хотите его, выбираете другую платформу.
Если действительно необходимо сделать переход к среде реального времени, я использовал RTX в прошлом, когда детерминированная выборка была необходима (от пользовательского последовательного устройства) и везла очень с ним.
Существует много причин что частоты таймера прочь. Пример с аппаратными средствами, тот же поток занят другой обработкой и так далее...
, Если Вы хотите более точно время, используйте класс Секундомера в Системе. Пространство имен диагностики.
На основе Ваших комментариев Вы не должны использовать таймер вообще. Необходимо использовать цикл с секундомером для проверки интервала и спин-блокировки, таким образом, Вы не теряете квант.
Часть проблемы - то, что Таймеры имеют два задержки для учета. Это может варьироваться в зависимости от того, как таймер реализован в ОС.
таймер имеет хороший контроль над № 1, но почти никакое управление № 2. Это может предупредить ОС, что хотело бы работать снова, но ОС свободна разбудить его, когда похоже на него.
Вот хорошая реализация таймера, использующего мультимедийный таймер http://www.softwareinteractions.com/blog/2009 /12/7/using-the-multimedia-timer-from-c.html