Многопоточная служба Windows в MingW

Лучшая книга по этой теме Руководство Методологии Повторного использования. Это покрывает и VHDL и Verilog.

И в особенности некоторые проблемы, которые не имеют точного совпадения в программном обеспечении:

  • Никакие фиксаторы
  • Быть осторожными со сбросом
  • Проверка Ваша внутренняя и внешняя синхронизация
  • Использование только синтезируемый код
  • Регистр Ваши выводы всех модулей
  • Быть осторожными с блокированием по сравнению с неблокирующимися присвоениями
  • Быть осторожными с чувствительными списками для комбинаторной логики (или использование (*) в Verilog)

Некоторые, которые являются тем же, включают

  • , CM
  • Использования Имеет обзоры кода
  • , Тест (моделирует) Ваш код
  • код Повторного использования, когда соответствующий
  • Имеют актуальное расписание
  • , Имеют спецификацию или варианты использования или Гибкого клиента

7
задан Vijay Mathew 16 September 2009 в 11:34
поделиться

4 ответа

Интересно, можно ли отладить его, когда он работает как служба. Должно быть что-то пугает вашу программу, когда ее запускает хост службы. Возможно, попробуйте подключить отладчик к svchost.exe, по крайней мере, вы сможете увидеть, какие модули загружены и, возможно, какое исключение вызывает сбой.

1
ответ дан 7 December 2019 в 03:18
поделиться

Я подозреваю - mthreads приводит к зависимости от DLL, и эта DLL не находится на пути, когда она работает как служба. В моей среде cygwin, если я компилирую тривиальную программу с помощью «-mno-cygwin -mthreads», я получаю зависимость от MINGWM10.DLL, которая, конечно, не будет на пути при работе в качестве службы. Если я попытаюсь запустить его без установленного PATH, он выйдет из строя при начале загрузки (и оставит какашку в журнале событий приложений).

Я бы поднял ваш exe в Dependency Walker ( http: / /www.dependencywalker.com), чтобы увидеть, что вы загружаете во время загрузки, и проверьте свой журнал событий Windows, чтобы увидеть, есть ли там какие-либо подсказки. Вероятно, вам понадобится поместить копию необходимых ей DLL вместе с исполняемым файлом.

5
ответ дан 7 December 2019 в 03:18
поделиться

Is your application even starting up at all? Put a call to OutputDebugString (or equivalent) at the start of your main function to see if it even gets that far. (Grab DbgView from SysInternals if you don't have it already.)

If it doesn't get that far, we start checking for the obvious: is it a matter of the application not finding the runtime DLL? It could be that you have the regular runtime in its PATH, but it can't find the MT version. That could explain the behaviour you describe. You may need to copy the MT runtime or update the PATH accordingly.

1
ответ дан 7 December 2019 в 03:18
поделиться

Вы требуется mingwm10.dll в рабочем каталоге или в [edit: system, not per user] PATH, потому что программы C ++, скомпилированные с параметром -mthread, имеют эту зависимость. Если вы уверены, что исключение никогда не будет создано вашим кодом и не будет распространяться через ваш стек, используйте -fno-exception вместо -mthread для разрешения зависимости.

2
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

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