Не способный присоединить процесс окон Service

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

Точка 1: Вы по существу обновляете положение и скорость с помощью явное/вперед Euler повторение , где каждое новое значение для состояний должно быть функцией старых значений. В таком случае необходимо обновлять положение сначала , затем обновляя скорость.

Точка 2: существуют более реалистические модели физики для [1 113] эффект трения перетаскивания . Одна модель (предложенный [1 114] Adam Liss ) включает силу сопротивления, которая пропорциональна скорости (известный как перетаскивание Stokes, которое обычно относится к низким ситуациям скорости). Тот, который я ранее предложил, включает силу сопротивления, которая пропорциональна квадрат из скорости (известный как квадратичное перетаскивание, которое обычно относится к высоким ситуациям скорости). Я обращусь к каждому относительно того, как Вы вывели бы формулы для максимальной скорости и время, требуемое эффективно достигнуть максимальной скорости. Я буду предшествовать полным деривациям, так как они скорее включены.

перетаскивание Stokes:

уравнение для обновления скорости было бы:

velocity += acceleration - friction*velocity

, который представляет следующее дифференциальное уравнение:

dv/dt = a - f*v

Используя первую запись в [1 116] эта таблица интегралов , мы можем найти решение (принимающий v = 0 в t = 0):

v = (a/f) - (a/f)*exp(-f*t)

максимум (т.е. терминал) скорость возникает, когда t>> 0, так, чтобы второй срок в уравнении был очень близко к нулю и:

v_max = a/f

Относительно времени должен был достигнуть максимальной скорости, отметить, что уравнение никогда действительно достигает ее, но вместо этого асимптоты к ней. Однако, когда аргумент экспоненциала равняется-5, скорость составляет приблизительно 98% максимальной скорости, вероятно, достаточно близко для рассмотрения этого равным. Можно тогда приблизить время к максимальной скорости как:

t_max = 5/f

можно тогда использовать эти два уравнения для решения для [1 147] f и , учитывая желаемое vmax и tmax.

Квадратичное перетаскивание:

уравнение для обновления скорости было бы:

velocity += acceleration - friction*velocity*velocity

, который представляет следующее дифференциальное уравнение:

dv/dt = a - f*v^2

Используя первую запись в [1 118] эта таблица интегралов , мы можем найти решение (принимающий v = 0 в t = 0):

v = sqrt(a/f)*(exp(2*sqrt(a*f)*t) - 1)/(exp(2*sqrt(a*f)*t) + 1)

максимум (т.е. терминал) скорость возникает, когда t>> 0, так, чтобы экспоненциальные условия были намного больше, чем 1 и подходы уравнения:

v_max = sqrt(a/f)

Относительно времени должен был достигнуть максимальной скорости, отметить, что уравнение никогда действительно достигает ее, но вместо этого асимптоты к ней. Однако, когда аргумент экспоненциала равняется 5, скорость составляет приблизительно 99% максимальной скорости, вероятно, достаточно близко для рассмотрения этого равным. Можно тогда приблизить время к максимальной скорости как:

t_max = 2.5/sqrt(a*f)

, который также эквивалентен:

t_max = 2.5/(f*v_max)

Для желаемого vmax и tmax, второе уравнение для [1 154] tmax скажет Вам, чем должен быть f, и затем можно включить это к уравнению для [1 156] vmax для получения значения для [1 157] .

Это походит на небольшое количество излишества, но это на самом деле некоторые самые простые пути к образцовому перетаскиванию! Любой, кто действительно хочет видеть этапы интеграции, может кинуть мне письмо, и я отправлю их Вам. Они немного слишком включены для ввода здесь.

Другая Точка: я сразу не понял это, но обновление скорости больше не необходимо, если Вы вместо этого используете формулы, я произошел для [1 159] v (t) . Если Вы просто смоделируете ускорение от отдыха, и Вы отслеживаете время, так как ускорение началось, то код посмотрит что-то как:

position += velocity_function(timeSinceStart)

, где "velocity_function" является одной из этих двух формул для [1 160] v (t) и Вам больше не была бы нужна скоростная переменная. В целом здесь существует компромисс: вычисление v (t) может быть более в вычислительном отношении дорогим, чем простое обновление скорости с повторяющейся схемой (из-за экспоненциальных условий), но это, как гарантируют, останется стабильным и ограниченным. При определенных условиях (как попытка получить очень короткое tmax), повторение может стать нестабильным и взрыв, типичная проблема с вперед Euler методом. Однако поддерживая пределы на переменные (как 0 < f < 1), должен предотвратить эту нестабильность.

, Кроме того, если Вы чувствуете себя несколько мазохистскими, можно быть в состоянии интегрировать формулу для [1 164] v (t) для получения закрытого решения для формы для [1 165] p (t) , таким образом предшествующий потребность в повторении Newton в целом. Я оставлю это, чтобы другие попытались. =)

5
задан Randy supports Monica 28 August 2009 в 03:57
поделиться

4 ответа

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

System.Diagnostics.Debugger.Break();

При запуске службы вам будет предложено для отладки процесса. Выберите отладчик Visual Studio 2008, и процесс загрузится и остановится в вашей программной точке останова. Нажмите F5, чтобы снова начать работу.

EDIT:

Допустим, вы создали службу (режим выпуска или режим отладки - не имеет значения) и использовали installutil для установки службы, но вы этого не сделали. начал еще. Пока служба не запущена, вы можете продолжать вносить изменения в код и повторно компилировать. Когда вы запускаете службу, ваш сервис будет отражать ваши последние изменения кода. Если служба работает , вы не сможете полностью скомпилировать службу, потому что exe / dll уже используются и не могут быть заменены. Очевидно, просто остановите службу, перекомпилируйте, а затем снова запустите службу. Дело в следующем: Вам не нужно удалять службу, чтобы изменить код. Просто остановите ее, измените код, перекомпилируйте и перезапустите.

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

По умолчанию когда вы создаете приложение Visual Studio в режиме отладки, оно помещается в подкаталог bin \ Debug вашего проекта. При сборке в режиме выпуска исполняемый файл помещается в подкаталог bin \ Release. Когда вы используете installutil для установки службы, важно только, где она находится. В вашем случае я бы предложил отменить установку версии вашей службы в режиме выпуска ( installutil /uc:\myapp\myapp\bin\release\myapp.exe), поставить программную точку останова, построить отладочную версию, а затем с помощью installutil установить отладочную версию (из каталога bin \ Debug).

Извините, это было многословно. Надеюсь, это ясно.

Когда вы используете installutil для установки службы, важно только то, где она находится. В вашем случае я бы предложил отменить установку версии вашей службы в режиме выпуска ( installutil /uc:\myapp\myapp\bin\release\myapp.exe), поставить программную точку останова, построить отладочную версию, а затем с помощью installutil установить отладочную версию (из каталога bin \ Debug).

Извините, это было многословно. Надеюсь, это ясно.

Когда вы используете installutil для установки службы, важно только, где она находится. В вашем случае я бы предложил отменить установку версии вашей службы в режиме выпуска ( installutil /uc:\myapp\myapp\bin\release\myapp.exe), поставить программную точку останова, построить отладочную версию, а затем с помощью installutil установить отладочную версию (из каталога bin \ Debug).

Извините, это было многословно. Надеюсь, это ясно.

а затем с помощью installutil установить отладочную версию (из каталога bin \ Debug).

Извините, это было многословно. Надеюсь, это ясно.

а затем с помощью installutil установить отладочную версию (из каталога bin \ Debug).

Извините, это было многословно. Надеюсь, это ясно.

10
ответ дан 18 December 2019 в 05:49
поделиться

Are you sure you are looking at your actual service process? Check the service name -- is it something like servicename.vshost.exe? If so, then that is not your service but a visual studio hosting process used for F5 debugging (among other things).

To debug your service select the "show processes from all users" checkbox. You should see the actual service process, servicename.exe, in the process list. If it is visible then just attach to that process.

3
ответ дан 18 December 2019 в 05:49
поделиться

A service is nothing more than a console app so you should be able to run the exe from the command line as long as it was compiled in debug mode. Once the process is running from the command line you would then go to Debug => attach to process in visual studio and attach to the exe you just fired up from the command line. You could also run within the Visual Studio IDE directly with F5.

If your service is running under a special user account you will need to use the runas /user command either to fire up visual studio if you are debugging in visual studio or from the command line if you are running it from the command line.

If this does not work.... let me know.

Best Regards, Michael

0
ответ дан 18 December 2019 в 05:49
поделиться
[

] Если вы следуете "учебнику" по созданию базовой службы Windows в MSDN, вы столкнетесь с этим. Вы увидите MyNewService.vshost.exe в диалоговом окне Attach To Process, но он будет отключен. Чтобы увидеть ваш сервис, вы должны проверить ОБЯЗАТЕЛЬНО "Показывать процессы от всех пользователей" И "Показывать процессы во всех сеансах", чтобы увидеть ваш сервис. Служба работает под именем пользователя "SYSTEM", если вы следовали инструкциям в учебнике, и службы обычно работают в другой сессии.[

] [

]После того, как вы отметите оба этих поля (и проигнорируете MyNewService.vshost.exe), вы увидите MyNewService.exe, который вы сможете выбрать и отладить.[

] [

]Конечно, ничего не случится, пока служба не достигнет точки останова. Вы можете создать обработчик OnPause (как и OnContinue), но для того, чтобы иметь возможность приостановить работу сервиса, вам нужно будет установить флаг CanPauseAndContinue на вашем сервисе (тот же самый объект, что и флаг AutoLog).[

] [

]Кроме того, в моем тестировании на 64-битной машине, простая перекомпиляция проекта не позволила успешно отладить его. Даже компиляция и переустановка не помогли. Мне пришлось перекомпилировать проект, затем перекомпилировать проект установки, а затем переустановить установку, чтобы иметь возможность отлаживать службу.[

] [

]Наконец, журнал регистрации событий можно посмотреть через Event Viewer, в разделе Administrative Tools панели управления. MyNewLog" находится в разделе Журналы приложений и сервисов, когда он создается, как описано в учебном руководстве MSDN[

].
15
ответ дан 18 December 2019 в 05:49
поделиться
Другие вопросы по тегам:

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