Очень странное поведение!
В прикрепленном архиве лежит программа. При запуске она создает поток типа TThread и помещает свою иконку в системный трей. Поток при создании в методе Сreate сразу же завершается вызовом метода Terminate. В потоке есть переменная IsTerminated, которая которая в зависимости от состояния потока(работает/не работает) содержит значение true/false. В событии OnCloseQuery главной формы вызываемом при закрытии программы проверяется переменная IsTerminated, т.е. работает поток или нет и если работает то завершает работу потока. Самое интересное: если закрывать главную форму крестиком в заголовке окна то все проходит нормально, а если завершать программу из иконки в трее(навешан на нее popupmenu) то получается Access Violation(пытается терминейтить уже давно завершенный поток). Все это в Delphi 2009. В 2007-й все проходит нормально. Это глюк 2009-й или я что-то неправильно сделал?
|