Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
#1

Остановка потока при включении/выключении отображения ярлыков на рабочем столе - Delphi

30.06.2016, 23:14. Просмотров 987. Ответов 43
Метки нет (Все метки)

Привет всем! Помогите разобраться не как не могу решить проблему.
Есть код при старте окна запуск потока
Delphi
1
2
  Potok:=TPotok.Create(False);
  Potok.Priority:=tpNormal;
в потоке начало
Delphi
1
  Potok.FreeOnTerminate:=True;
затем поучение json с сети запись данных в лейбы
конец потока запуск процедуры в которой
Delphi
1
2
3
  Potok.Terminate; 
  Potok:=TPotok.Create(False);
  Potok.Priority:=tpNormal;
и так постоянно...

все вроде и работает утечек нет , но вот проблема....
Когда программа работает я на рабочем столе нажимаю отображать ярлыки приложений либо скрыть ярлыки , поток останавливается и не пере запускается.

Так же если зайти на комп через тимвайвер и выйти , то он тоже остановится.

Пишу в CodeTyphon32 Windows 7 32bit
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2016, 23:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Остановка потока при включении/выключении отображения ярлыков на рабочем столе (Delphi):

Панель для ярлыков на рабочем столе
Всем привет хочу сделать такую панельку для ярлыков . Чтоб по нажатию на...

Рисовалка на рабочем столе
Вот написал программку, что бы рисовать в форме, а теперь мне нужно сделать...

Рисуем на Рабочем столе
Помогите решить задачу на "Delphi". Есть программа, (код приведён ниже) суть...

Txt-файлы на рабочем столе
Задача: 1. Взять txt файлы с рабочего стола (любые, какие есть) 2. Спарсить...

Размещение формы на рабочем столе
Подскажите пожалуйста каким образом задать размещение не перемещаемой формы...

Размещения окна на рабочем столе
Как сделать так, чтобы при открытии программы она открывалась в определённых...

43
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
30.06.2016, 23:45 #2
Цитата Сообщение от mit36rus Посмотреть сообщение
запись данных в лейбы
логично было бы делать как раз в OnTerminate
все равно только в главном потоке это можно делать

по симптомам непонятно, что происходит
показывайте код
0
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
01.07.2016, 10:53  [ТС] #3
Процедуру рестарта потока убрал теперь он постоянно крутится поток, ошибка как я заметил возникает когда вкл откл ярлыки рабочего стола выскакивает ошибка перевода числа с лейбла в Float именно StrToFloat так как у меня вначале данные пишутся в лейбы после берутся с лейбов и переводятся в Float .

Пробовал все перевести на Double без лейбов все равно тот ответ с сервера приходит в json я его парсю и значение перевожу как StrToFloat в переменную Double и опять же тут возникает ошибка при вкл откл ярлыков .

Вот сейчас проверил еще раз выскакивает ошибка
.....вызвал класс исключение EConvertError c сообщением
"0.00006765" is an invalit float

Извините код целиком копировать не могу на форум
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
01.07.2016, 11:01 #4
отличный подход
у меня траблы, но код недоступен, так что отгадывайте, и побыстрее

контрольный вопрос
лейблы заполняются в синхронизации или просто в Execute?
0
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
01.07.2016, 11:26  [ТС] #5
вообщем нашел пока место одно где косяк но как вот именно всего один лейбл так может косячить хотя с другими все в порядке . именно с него когда перевод во флоат ошибка сейчас попробуем по другому

Добавлено через 5 минут
у меня в приложение 5 функций которые выполняются по очередности в потоке при условии что выполнена предыдущая.
первая функция заполняет лейбы к примеру l1 l2 l3 вторая заполняет l4 l5 l6 ну и третия опять же к примеру если предыдущие были положительно выполнение просто сравнивает l1 c l4 l5 c l6
это я все образно написал .
Все они выполняются в одном потоке в Execute
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
01.07.2016, 11:38 #6
понятно

1.ДОСТУП К КОМПОНЕНТАМ из потока ЗАПРЕЩЕН
2.ВСЕ функции FORMAT, STRTOxxx , xxxTOSTR из потока должны вызываться только с доп. параметром FormatSettings
0
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
01.07.2016, 11:54  [ТС] #7
Все победил спасибо ))))
0
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
11.07.2016, 14:55  [ТС] #8
не фига не победил!!!!!!

приложение полностью переписал. потоки не используют форму так как на форме вообще ничего нет ! приложение запускается без формы в трее.

запускаю пакетный анализатор слежу за приложением , идут запросы все как надо.... НО стоит вкл или отключить показ ярлыков рабочего стола пакеты перестают идти и помогает только перезапуск!

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

может это инди 10 тупит? там у меня ихний компонент idHTTP и SSL

Добавлено через 2 минуты
сейчас попробую переписать на сервис , хотя не когда с этим дело не имел вообще

Добавлено через 16 минут
Может ли это быть что функции описаны в разделе паблик формы , а поток без синхронизации обращается к функциям этой формы?

Добавлено через 1 час 20 минут
решил так форму спрятал вообще потоки пустил через synchronize у меня их два и вначале отрабатывает при условие один и запускается второй

Добавлено через 4 минуты
хорошо я пообщался сам с собой ....
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
11.07.2016, 20:34 #9
здорово
и даже если встревать, где код для поиска ошибок??
0
HiredKiller
11.07.2016, 22:51
  #10

Не по теме:

своруют же суперкод

0
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
12.07.2016, 00:19  [ТС] #11
да своруют так как приложение рассчитано для торгов на бирже и не продается

Добавлено через 16 секунд
а желающих кто ищет этот софт полно
0
northener
12.07.2016, 01:12
  #12

Не по теме:

Цитата Сообщение от mit36rus Посмотреть сообщение
да своруют так как приложение рассчитано для торгов на бирже
Хм. Вот интересно. Тебя кто-то нанял для выполнения этой задачи/работы или это твоя личная инициатива?
Если первое, то мне жаль ту контору, которая выбрала для решения своей задачи троешника. Если второе, тогда ещё не всё потеряно.

0
mss
12.07.2016, 10:45
  #13

Не по теме:

да своруют
Сразу вспоминается бородатый анекдот про Неуловимого Джо)

0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
12.07.2016, 10:45 #14
работа с интернетом и потоками обсосана до костей
вот примеры и немного рассуждений
http://www.cyberforum.ru/delphi-begi...ml#post8356379
http://www.cyberforum.ru/delphi-begi...ml#post7766045
все рабочее, не падающее
1
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
12.07.2016, 12:54  [ТС] #15
оооо по вылазили толстые трооли.... как только им кусок личного софта не скинули....

вот кусок кода к примеру другое однотипно.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
function TFormMain.user_info: Boolean;
var
  http: TIdHTTP;
  post: TStringStream;
  response: TStringStream;
  nonce: string;
  hash: string;
  jOtvet, jBalans: ISuperObject;
  error: string;
begin
  nonce := FormatDateTime('yyyymmddhhnnsszzz',now);
  post := TStringStream.Create;
  post.WriteString('nonce=' + nonce);
  response := TStringStream.Create;
  hash := SHA512DigestToHex(CalcHMAC_SHA512(sign_key, post.DataString));
  http := TIdHTTP.Create(nil);
  http.ReadTimeout := 2000;
  http.Request.ContentType := 'application/x-www-form-urlencoded';
  http.Request.CustomHeaders.AddValue('Key', key);
  http.Request.CustomHeaders.AddValue('Sign', hash);
 
  try
    http.Post('https://...............................', post, response);
  except
    on E: Exception do
      error := e.Message;
  end;
 
  if Length(error) > 0 then
  begin
    error := '';
    response.Free;
    post.Free;
    http.Disconnect;
    http.Free;
    hash := '';
    nonce := '';
    Result := False;
  end;
 
  if error = '' then
  begin
    jOtvet := SO(UnicodeString(response.DataString));
 
    jBalans := jOtvet.O['balances'];
    LRub := StrToFloat(string(jBalans.S['RUB']));
    LBtc := StrToFloat(string(jBalans.S['BTC']));
    btc_balans:=StrToFloat(string(jBalans.S['BTC']));
 
    jBalans := jOtvet.O['reserved'];
    rub_balans_order:=StrToFloat(string(jBalans.S['RUB']));
    btc_balans_order:=StrToFloat(string(jBalans.S['BTC']));
 
 
    response.Free;
    post.Free;
    http.Disconnect;
    http.Free;
    hash := '';
    nonce := '';
    result := True;
  end;
end;

Эту функцию крутит просто поток без создания еще одной процедуры с синхронизацией , а так в блоке экзекуте и вот когда вкл выключить ярлыки рабочего стола поток останавливается. Ну что троли довольны? Я пишу 2 месяц для себя вообще , до этого минус месяц потратил на написание mitsoft.ru там программы. Я умею делать другие вещи, где могу макнуть многих из вас носом в гавно , но я же не кидаюсь тут понтами "МНЕ жаль ту фирму или троечника....."
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
12.07.2016, 13:03 #16
11:функции Formatxxxx не должны использоваться в потоке без дополнительного параметра TFormatSettings

29:значение переменной error не определено, если не возникало Exception

43:UnicodeString не нужно, если указать charset в заголовке Accept и response := TStringStream.Create('',TEncoding.UTF8)

45..52: strToFloat() тоже требует formatSettings в потоках

P.S.
Цитата Сообщение от mit36rus Посмотреть сообщение
Delphi
    response.Free;
    post.Free;
    http.Disconnect;
    http.Free;
    hash := '';
    nonce := '';
очевидно просится в отдельную вложенную процедуру
1
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
12.07.2016, 13:15  [ТС] #17
там я только , что сам заметил что в принципе второй If не нужен , error задать сразу пустое значение ? error:=''; ?

Добавлено через 7 минут
и еще я использовал DefaultFormatSettings.DecimalSeparator:='.'; я так понял нужно его убрать и использовать TFormatSettings ?
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
12.07.2016, 13:23 #18
нужно инициализировать локальную переменную fs:TFormatSettings и передавать ее последним параметром

Добавлено через 24 секунды
http://www.cyberforum.ru/delphi-data...ml#post8485247
0
mit36rus
-4 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 17
12.07.2016, 13:25  [ТС] #19
как в том мане создал
Pascal
1
2
3
4
5
6
var
 formatSettings : TFormatSettings;
 В создание формы прописал
 formatSettings.DecimalSeparator:='.'; 
 В функции
 LRub := StrToFloat(string(jBalans.S['RUB'],formatSettings));
так?

Добавлено через 1 минуту
спасибо за помощь
0
mss
2631 / 2256 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
12.07.2016, 13:29 #20
Цитата Сообщение от mit36rus Посмотреть сообщение
поток останавливается и не пере запускается
Он тебе так прямо и говорит "я останавливаюсь и не пере запускаюсь" ?)
На основании чего конкретно сделаны эти умозаключения ?
0
12.07.2016, 13:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2016, 13:29
Привет! Вот еще темы с решениями:

Закрепить программу на рабочем столе
Здравствуйте. Не знаю как корректно задать вопрос, но все же. Как закрепить...

Расшарить диски на удаленном рабочем столе
Всем привет. Использую MSTSCLib_TLB для подключения. Код...

Определение выбранного файла на рабочем столе
Как определить какой файл выбран на рабочем столе или в explorer? Мне нужно...

Как создать файл на рабочем столе?
каким образом? Добавлено через 3 минуты как просто создать файл я знаю, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru