Hjælp til tråd-forsøg
HolaJeg er ved at prøve kræfter med tråd-programmering og det er med tungen lige i munden så jeg håber der er nogle der kan hjælpe lidt :)
Idéen er at tråden skal stå og holde øje med en tabel. Når der kommer noget i tabellen skal den starte fra en ende af og sende en meddelse afsted.
Tråden er lavet via File->New->Thread Object.
procedure TfrmMain.FormCreate(Sender: TObject);
begin
QControl := MsgSender.Create(false);
end;
procedure TfrmMain.ButtonClick(Sender: TObject);
begin
QControl.WaitFor; <-- Første problem
QControl.Suspend;
//select fra en database og indsæt ind i min køtabel.
QControl.Resume;
end;
procedure MsgSender.Execute;
var
queuenmb: integer;
begin
SetName;
{ Place thread code here }
//repeat
//select * from queue order by entrynmb asc limit 1
//if not eof then begin
//if forespørgsel.msgtype = MAIL then begin
//Syncronize(SendMail(mailsubject, msg, mail));
//update aftaler set issentmail = 2 where plannerkey and kundenavn
//end
//else if forespørgsel.msgtype = SMS then begin
//Syncronize(SendSMS(mobilnummer, msg));
//update aftaler set issentsms = 2 where xxx
//end
//else
//frmMain.mlog.add('Ukendt beskedtype! Afsending stoppet!');
//delete from queue where aftalenmb = queuenmb
//end
//else
//sleep(60000); //sov 10 min.
//until Terminated;
end;
1) Som peget så er mit første problem at .WaitFor ikke kan bruges da MsgSender.Execute aldrig "udløber".
Men jeg har heller ikke lyst at suspende min tråd midt i en gennemgang da der hurtigt kan komme rod i tabellerne. Hvordan fixes det?
2) Er sleep den korrekte måde at få en tråd til at vente med at gen-køre eller er der andre metoder?
3) Funktionerne SendMail og SendSMS har brug for at tilgå nogle komponenter (bla. Indy SMTP). Skal de bare placeres på hovedformen og kaldes med frmMain.component.whatever? Eller kan tråd-unit'en laves som en usynlig form hvorpå jeg skal lægge komponenterne?
Det er mange store spørgsmål i et emne, så derfor er der også mange point at dele ud af.
På forhånd tak for hjælpen
Jesper
