Avatar billede Slettet bruger
22. juni 2005 - 18:25 Der er 6 kommentarer og
1 løsning

Simpel thread

Hej.

Jeg har prøvet at lave en thread med Fil->New->Thread Object.

Kode:

procedure th.UpdateCaption;
begin
  Form1.Caption := 'Updated in a thread';
end;

procedure th.Execute;
begin
  { Place thread code here }
  Synchronize(UpdateCaption);
end;

Men det virker ikke, den kommer med følgene fejl:
[Error] Unit2.pas(35): Undeclared identifier: 'UpdateCaption'
[Error] Unit2.pas(35): There is no overloaded version of 'Synchronize' that can be called with these arguments

Kan nogen hjælpe mig? :)

Hilsen
Steffen / 911help
Avatar billede kroning Nybegynder
22. juni 2005 - 20:23 #1
Jeg får ingen fejl hvis jeg kopiere din kode, du bliver nok nød til at poste noget mere kode medmindre en anden lige kan se hvad der er galt.
Avatar billede Slettet bruger
23. juni 2005 - 10:52 #2
Har prøvet at lave et nyt project, men det virker ikke for mig.

Koden:
Unit1:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.


Unit2:

unit Unit2;

interface

uses
  Classes;

type
  th = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure th.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ th }

procedure th.UpdateCaption;
begin
  Form1.Caption := 'Updated in a thread';
end;

procedure th.Execute;
begin
  { Place thread code here }
  Synchronize(UpdateCaption);
end;

end.
Avatar billede kroning Nybegynder
23. juni 2005 - 11:18 #3
Du mangler flere ting:

Din type i unit 2 skal se sådan ud, du mangler procedure UpdateCaption;

type
  th = class(TThread)
  private
    { Private declarations }
    procedure UpdateCaption;
  protected
    procedure Execute; override;
  end;

Du skal til føje uses Unit1; lige under implementation i unit 2:

implementation

uses Unit1;

{ Important: Methods and properties of ob....
Avatar billede Slettet bruger
23. juni 2005 - 11:34 #4
Takker nu virker det... Men hvordan kan jeg så få den til at køre f.eks. hvert andet minut? Tænker på at bruge en Timer... Er rimlig ny inden for threads :)
Avatar billede michdan Nybegynder
23. juni 2005 - 13:23 #5
Lige et spm. i svinget:

hvad er egentlig forskellen på at tilføje uses unit1 under implementationen fremfor at tilføje den i uses delen under deklarationen ???
Avatar billede kroning Nybegynder
23. juni 2005 - 14:19 #6
Hvis du skal køre noget hvert anden minut så kan du bruge en Timer, men at starte den tråd du lige har lavet hver andet minut med en Timer giver self. ingen mening da der ikke udføres andet kode end som der kan udføres i Timerens event.
Hvis det som tråden skal lave hvert andet minut er noget der tager en vis tid således at den ville få "programmet" til at "dø" så er det en go ide med en tråd, eller hvis tråden skulle kører hele tiden for f.eks. at stå og vente på input fra f.eks. seriel porten.
Hvis jeg skulle lave en tråd der udførte noget f.eks. hvert andet minut så ville jeg nok lave tråden én gang under opstart af programmet og så styrer tiden inde i selve tråden enten med at checke TickCount eller ved at benytte bla. WaitForSingleObject (se win32 help)
Avatar billede Slettet bruger
23. juni 2005 - 14:20 #7
Okay... Det kikker jeg på... Og tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester