1 / 1 / 0
Регистрация: 22.10.2016
Сообщений: 105
|
||||||
1 | ||||||
Ошибка в потоке16.10.2017, 23:36. Показов 827. Ответов 7
Метки нет (Все метки)
Задача такая - я хочу в потоке отслеживать какие в данный момент на компьютере запущены приложения. В дальнейшем хочу реализовать функцию по контролю за работой персонала (т.е. запустил работник на компьютере танки и программа посылает мне сообщение об этом по эл.почте). Столкнулся с такой проблемой - программа то работает то ни работает. Сам понимаю что напортачил где-то с синхронизацией с визуальными компонентами, но ни могу понять где ошибка. Вроде по учебнику все сделал. Программа должна в мемо выводить все работающие приложения.
0
|
16.10.2017, 23:36 | |
Ответы с готовыми решениями:
7
Ошибка в потоке Ошибка в потоке Ошибка в потоке Ошибка в потоке |
Native x86
5513 / 3272 / 934
Регистрация: 13.02.2013
Сообщений: 10,421
|
|
17.10.2017, 00:16 | 2 |
В вашем случае функция с полезным кодом вызывается синхронно в контексте основного потока, нет никакого смысла в TThred. Если вы используете обычный TTimer, работать будет так же, но без потоковых проблем.
А еще вы зачем-то дважды вызываете GetWindowText.
0
|
1 / 1 / 0
Регистрация: 22.10.2016
Сообщений: 105
|
|
17.10.2017, 00:54 [ТС] | 3 |
В основном потоке у меня другие операции выполняются. Хотелось бы эту операцию в др. поток вынести. Насчет GetWindowText согласен
Добавлено через 1 минуту Если не получится сделать через TThred реализуюсь через Ttimer, но просто еще параллельно хотел получить знания по потокам
0
|
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
|
|
17.10.2017, 02:37 | 4 |
А также и ListboxAdd. Ибо она вызывается из Synchronize.
Ну вот ещё одно знание вы считаем уже получили. Всё что выполняется в методе TThread.Synchronize выполняется в основном потоке.
0
|
1 / 1 / 0
Регистрация: 22.10.2016
Сообщений: 105
|
|
17.10.2017, 03:17 [ТС] | 5 |
Получается я не правильно использую Synchronize ?
0
|
1 / 1 / 0
Регистрация: 22.10.2016
Сообщений: 105
|
||||||
17.10.2017, 13:03 [ТС] | 7 | |||||
0
|
Native x86
5513 / 3272 / 934
Регистрация: 13.02.2013
Сообщений: 10,421
|
||||||
17.10.2017, 16:22 | 8 | |||||
Конечно не работает, у вас при каждом добавлении мемка очищается.
И вообще, вы зря в поток это выносите, это очень легкий цикл, который отлично чувствовал бы себя в таймере. Тем более молотить вот так без перерыва в цикле вида while True do -- крайне дурной тон. Во первых вы нагрузите ядро процессора на 100% совершенно излишней работой (зачем вам мониторить окна 10000 раз в секунду?). А во вторых, ваш поток никогда не завершится, если уж крутить такой цикл, то он должен выглядеть так:
0
|
17.10.2017, 16:22 | |
17.10.2017, 16:22 | |
Помогаю со студенческими работами здесь
8
Delphi. Ошибка в потоке Ошибка при работе в потоке В чем ошибка в файловом потоке? Как получить значение переменной созданной в потоке, в другом потоке? Управление потоками. Изменение значения label (созданного в потоке 1) в потоке 2 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |