Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];

Вниз

Обмен значениями между потоками   Найти похожие ветки 

 
nali   (2007-05-08 12:27) [0]

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

Главный модуль:


Unit Unit1;
interface
.
.
.
var
url:string;
ThreadDownload_Done:Boolean=true;

implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
  ThreadDownload_Done:=false; // поток запущен      
  url:="http://www.server.com/file.htm";
  ThreadDownload:=TThreadDownload.Create(false);
  while true do
   begin
    Application.ProcessMessages;  
     if ThreadDownload_Done  then // если поток закончен - выходим
       begin        
        break;
       end;
    sleep(100);
  end;
...
end;

end.



Модуль потока:


unit Unit_Download;
interface

type
 TThreadDownload = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
   function DownLoadFile:Boolean;    
   procedure ThreadDone(Sender: TObject);
   ...
 end;

var
ThreadDownload: TThreadDownload;

implementation

uses Unit1;

procedure TThreadDownload.Execute;
begin
 OnTerminate:=ThreadDone;
 DownLoadFile;
end;

function TThreadDownload.DownLoadFile;
// закачка файла с сервера
begin
// здесь url="" , хотя в основном потоке устанавливал значение
FreeOnTerminate := True;
result:=false;
// далее идет закачка файла
...
end;

procedure TThreadDownload.ThreadDone(Sender: TObject);
begin
 ThreadDownload_Done:=true;
end;

end.


Вопрос: Почему переменная url пустая и как обмениватся значениями между потоками ?


 
Kolan ©   (2007-05-08 12:31) [1]

> while true do
>   begin
>    Application.ProcessMessages;  
>     if ThreadDownload_Done  then // если поток закончен
> — выходим
>       begin        
>        break;
>       end;
>    sleep(100);
>  end;


Даа, а зачем тебе поток тогда?

События знаешь что такое? Вот с помошью них все проблемы решаться&#133


 
Ega23 ©   (2007-05-08 12:47) [2]

Капец.
Про потоко-защищённые данные что-нибудь слышал?


 
Reindeer Moss Eater ©   (2007-05-08 12:52) [3]

ThreadDownload:=TThreadDownload.Create(false);

1. Вызывать конструктор надо с параметром false.
2. После создания присваивать паблик полю потока значение урл.
3. Делать потоку resume.

Либо вообще нарисовать свой конструктор с параметром url


 
DVM ©   (2007-05-08 12:54) [4]


> и как обмениватся значениями между потоками?

В поток можно передать значение с конструктором, или в объекте потока сделать защищенные критическими секциями свойства. Обращаться к полям только через эти свойства как снаружи так и внитри потока.

Из потока можно передать значение с пом сообщения или Synchronize


 
nali   (2007-05-08 13:06) [5]

Спасибо, попробую до запуска потока передавать значения в поток через его поля, а обратно через Synchronize.


 
Reindeer Moss Eater ©   (2007-05-08 13:10) [6]

1. Вызывать конструктор надо с параметром false.

то есть наоборот с true. Иначе он сразу начнет выполняться



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.048 c
15-1181225632
Interior
2007-06-07 18:13
2007.07.08
Пакет легализации пиратского ПО


11-1164605756
StormA
2006-11-27 08:35
2007.07.08
RE_Text (RichEdit)


15-1181324300
isasa
2007-06-08 21:38
2007.07.08
Навеяно Розычем()инициативная группа)


15-1181384901
Суслик
2007-06-09 14:28
2007.07.08
Кому удалось поставить?


2-1181592639
Bullfrog
2007-06-12 00:10
2007.07.08
Чем можно открыть gif?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский