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

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

30.06.2016, 23:14. Просмотров 1002. Ответов 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". Есть программа, (код приведён ниже) суть...

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

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

43
krapotkin
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,585
Записей в блоге: 15
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
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,585
Записей в блоге: 15
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
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,585
Записей в блоге: 15
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
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,585
Записей в блоге: 15
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
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,585
Записей в блоге: 15
12.07.2016, 10:45 #14
работа с интернетом и потоками обсосана до костей
вот примеры и немного рассуждений
Повтор string
Оптимизация приложения "менеджер закачек"
все рабочее, не падающее
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
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,585
Записей в блоге: 15
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
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,585
Записей в блоге: 15
12.07.2016, 13:23 #18
нужно инициализировать локальную переменную fs:TFormatSettings и передавать ее последним параметром

Добавлено через 24 секунды
Тип numeric delphi
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
2632 / 2257 / 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 для подключения. Код...


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

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

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