[Delphi] Проблема с компилятором

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by kakeolala, 22 Jun 2011.

  1. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    В общем второй раз уже так.
    К примеру есть код:
    Code:
    http.HTTPMethod('GET','http://ya.ru/');
       form1.Memo1.Text:=http.Text(http.Document);
    
    но ничего нету - вообще нету. Но если я ставлю брэкпоинты и даю программе работать по нажатию F9 то все хорошо.

    + сейчас появилось такое. Что к примеру по нажатию копки запускается потом который к примеру в memo1 выводит числа от 1 до 1000 - и стоит только курсор сдвинуть на саму форму за пределы границ формы, то сразу ошибка про канвас появляется.
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    я один ничего не понял?
     
  3. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Нет =-)
    Помнится у меня что-то было с канвасом связано, только не могу вспомнить в каком контесте.
    Давай, Какеола, проспись, протрезвей и перепиши 1-й пост подробнее и внятнее)))
     
    #3 xophet, 22 Jun 2011
    Last edited: 22 Jun 2011
  4. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    =)
    еще раз повторяю: программа не может получить данные из интернета ( код страницы ) если просто нажать F9. Но если на строках получения текста страницы ыставлю брэкпоинты - программа получает данные из интернета.
     
  5. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    У тебя этот код выполняеться случайно не в дополнительном, созданном тобой потоке, или же все таки в главном?
     
  6. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    в дополнительном. до этого написал 2-е программы - пашут. а эта чет сопротивляется
     
  7. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Какеола, какеола ака какашкин. Говнокодер ты да к тому же ленивый.
    Я ведь тебе уже писал:
    http://forum.antichat.ru/showpost.php?p=2675393&postcount=8
    И даже говорил, что с визуальными компонентами из потока работать можно только через synchronize!!!!!!!!!!!!
    И где-то в той же теме я распинался на счет sendmessage и postmessage.
    А толку че-то не вижу...
     
    #7 xophet, 23 Jun 2011
    Last edited: 23 Jun 2011
  8. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Code:
    http.HTTPMethod('GET','http://ya.ru/');
    Synchronize(procedure
             begin
                 form1.Memo1.Text:=http.Text(http.Document);
             end);
    
    :rolleyes:
     
  9. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    ага, спасибо за теплые слова - а что если я запускаю 1 поток ?
    И я писал вот так:
    Code:
    procedure TNewThread.Execute;
    begin
    form1.Memo1.Lines.Add('1');
    end;
    
    и все равно вываливается эта ошибка ? вот незадача то...
    2xophet
    сам редиска немытая и пережованная
     
    #9 kakeolala, 23 Jun 2011
    Last edited: 23 Jun 2011
  10. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    сначало про канвас вот вываливается, далее послее нее сразу про дескриптор окна
     
  11. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    ты запускаешь 1 ДОПОЛНИТЕЛЬНЫЙ поток, а с визуальными компонентами можно работать только из ОСНОВНОГО потока.
    читай статью с винграда.
    Я думаю тему можно закрыть т.к. проблема решена и дабы не разводить флуд.
    P.S. и переименовать тему в "проблемы с головой и руками" :D
    P.P.S. ну не смог удержаться и не потролить слегка :D
     
    #11 xophet, 23 Jun 2011
    Last edited: 23 Jun 2011
    1 person likes this.
  12. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    да епт, с визуальными компонентами можно работать если 1 поток, если 2 уже синхронайз.
    я даже в поток пишу http.httpmethod('get','http://ya.ru/); все равно вылетает ошибка
     
  13. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    к контролу можно обращаться только из потока-родителя.
    поток родитель создается при запуске программы.

    Ты мне кажется этого не понимаешь.
     
    1 person likes this.
  14. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    мда млять - у вас голова есть.
    Вот кусок кода моей программы которая компилируется и работает:
    Code:
    procedure TNewThread.Execute;
    var i,o,p,c:integer;s:string;
    begin
     for i:=strtoint(Form1.Edit1.Text) to strtoint(form1.edit2.text) do
      begin
       form1.StatusBar1.Panels.Items[0].Text:='Страница:'+inttostr(i);
       http.HTTPMethod('GET','link+inttostr(i));
       s:=http.Text(http.Document);
    [code]
    спокойно работает - т.к. однопоточная.Сую это-же к себе в программу - ошибка вываливается. Получается что с той программой баг раз она компилируется и работает чтоли
     
  15. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    kakeolala блин, тебя уже 5 раз прямым текстом послали... читать литературу.
    как же тебя надо послать, чтобы ты пошел?
    Следи за развитием мысли:
    ты запускаешь программу. появляется форма твоя. ЭТО ОСНОВНОЙ ПОТОК.
    С визуальными компоентами ты ДОЛЖЕН работать ТОЛЬКО из НЕГО
    из всех потоков, которые ты создаешь TNewThread.Execute; работать ты МОЖЕШЬ но результат будет непредскауем. Иногда выполняется прога, иногда канвас вылазит иногда компоненты ничего не отображают, вызывая метод Synchronize ты переводишь выполнение потока в контекст основного потока (в литературе встречается "поток VCL") и можешь работать с ВИЗУАЛЬНЫМИ компонетами формы.
    ВСЕ, обьяснил для дегенератов еще раз че-то высрешь тут, а тем более с намеком "вы все тупые, один я умный" будешь мной слаться нах, а не на винград. я думаю народ присоединиься.
     
    #15 xophet, 23 Jun 2011
    Last edited: 23 Jun 2011
    1 person likes this.
  16. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Нет, прога не однопоточная. Даже по этому видно:
    что код будет выполняться в новом потоке.
    Ошибки с канвой и т. д. не всегда возникают, когда ты работаешь с GUI из дополнительного потока и не используешь метод Synchronize. Но если ты все таки не используешь его, то самые разнообразные ошибки могут появиться в любой самый неожиданный момент.
     
  17. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    2xophet я те 3 раза писал - мудак чтоли. Ну смотри кусок кода:
    Code:
      TNewThread = class(TThread)
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;
    
    var
      Form1: TForm1;
      reg:TRegExpr;
      http:thttpsend;
      list,list1:tstringlist;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     http:=thttpsend.Create;
    end;
    
    procedure TNewThread.Execute;
    begin
     http.httpmethod('GET','http://ya.ru');
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var NewThread: TNewThread;
    begin
     NewThread:=TNewThread.Create(true);
     NewThread.FreeOnTerminate:=true;
     NewThread.Priority:=tpLower;
     NewThread.Resume;
    end;
    
    
    end.
    
    
    куда мне синхройз по твоему написать ? в http чтоли
     
  18. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    пиздец ТС неадекват, ему объясняют, он быдлит.

    1. TNewThread = class(TThread) - что это блять?
    2. Туда и sync
    3. sync вызывается внутри класса

    понятно?!?!

    еще раз блять, нельзя обращаться к контролам из другого потока, не хочешь слушать?
    твои проблемы.
     
  19. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    Ладно хорошо. В этом коде тоже такая же ошибка. куда тут синхронайз ?
    Code:
    procedure TNewThread.Execute;
    begin
     http.httpmethod('GET','http://ya.ru');
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var NewThread: TNewThread;
    begin
     NewThread:=TNewThread.Create(true);
     NewThread.FreeOnTerminate:=true;
     NewThread.Priority:=tpLower;
     NewThread.Resume;
    end;
    
     
  20. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    а ты ткни нас, неразумных, носом в каком месте ты вывод в мемо делаешь. глядишь и подскажет кто...