Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 293

/ вопрос закрыт /

Приветствую, уважаемые эксперты!

Я программирую в Delphi XE2, и столкнулся с глупой проблемой.
Проблема у меня с отдельным потоком, и циклом в нём.
А если точнее, то поток произвольно завершает свою работу, или зависает. (Не разобрался до сих пор)

Приложение:
  1.  
  2.  
  3. <code>
  4. TNewThread = class(TThread)
  5. private
  6. protected
  7. procedure Execute; override;
  8. public
  9. end;
  10. </code>
  11.  
  12. TNewThread.Create(false);</code>
  13.  
  14.  
  15. Stop:=True;</code>
  16.  
  17.  
  18. <code>
  19. procedure TNewThread.Execute;
  20. begin
  21. while not(Stop) do
  22. begin
  23. IdHTTP:=TidHTTP.Create(nil);
  24. IdHTTP.HandleRedirects:=True;
  25. try
  26. hash:=IdHTTP.Get('http://site.ru/1.php');
  27. except
  28.  
  29. Continue;
  30. end;
  31. r:=TRegExpr.Create;
  32. r.InputString:=hash;
  33. r.Expression:='<div class="post_text">(.*?)</div>';
  34. if r.Exec then
  35. begin
  36. text:=r.Match[1];
  37. text:=StringReplace(text,'&quot;','"',[rfReplaceAll]);
  38. end;
  39. r.Free;
  40.  
  41. if text='' then
  42. begin
  43.  
  44. Sleep(1000);
  45. Continue;
  46. end else if text>'' then begin
  47.  
  48. end;
  49. end;
  50.  
  51. end;
  52. </code>
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  


Овчинников Алексей Иванович Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Овчинников Алексей Иванович (статус: Посетитель)
Вопрос отправлен: 26 октября 2012, 15:17
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 21; последнее сообщение — 30 октября 2012, 12:14; участников в обсуждении: 3.

Страницы: [« Предыдущая] [1] [2]

Вадим К

Вадим К (статус: Академик), 30 октября 2012, 12:14 [#21]:

PostMessage, как написали выше, ассинхронный - поток его отправил и забыл, а главный поток обработает его как только сможет. SendMessage работает немного по другому. Он отправляет сообщение и ждет, пока другой поток обработает его. Более того, если посмотреть на SendMessage, то видно, что он может возвратить результат назад в поток.

Итого, как сделать передачу картинки.
Поток отправляет с помощью sendmessage сообщение, третим параметром которого является ссылка на TBitmap (можно конечно и TImage, но это как то не красиво). Главный поток, получив такое сообщение, приводит параметр назад к TBitmap, копирует (копирует!!!) содержимое себе и выходит с обработчика. Отправляющий поток может себе работать дальше. Пока главный поток будет копировать себе картинку, отправляющий поток будет на паузе и ничего плохого не случиться. Если же главный поток скопирует не содержимое, а ссылку, то как только отправляющий поток поменяет картинку, произойдет бяка.
Галочка "подтверждения прочтения" - вселенское зло.

2 ноября 2012, 20:58: Вопрос закрыт (решение принял автор вопроса — Овчинников Алексей Иванович): Вопрос решён, всем огромное спасибо.

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 02:06
Выполнено за 0.03 сек.