AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTimer in DLL

Ein Thema von himitsu · begonnen am 9. Nov 2023 · letzter Beitrag vom 10. Nov 2023
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: TTimer in DLL

  Alt 9. Nov 2023, 18:43
Nutz doch die Windows Api CreateTimerQueueTimer()
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.857 Beiträge
 
Delphi 12 Athens
 
#2

AW: TTimer in DLL

  Alt 9. Nov 2023, 19:04
Wenn es eine eigene DLL und eine eigene Hostanwendung ist, ist die Sache doch sehr einfach:
Schreibe einfach ein ITimer Interface und hole dir das aus der Hostanwendung (z.B. mit meinem AppCentral Projekt). Dann hast du keinerlei Probleme.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#3

AW: TTimer in DLL

  Alt 9. Nov 2023, 19:28
Aktuell eine eigene DLL und eigene Anwendung,
aber per se ist es so vorgesehen, dass sie auch von anderen Anwendungen verwendet werden kann.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.857 Beiträge
 
Delphi 12 Athens
 
#4

AW: TTimer in DLL

  Alt 9. Nov 2023, 19:40
Also ich habe es gerade ausprobiert (Delphi 11.3)...
Formular in DLL erstellt, TTimer drauf, Formular zwischen begin und end des Projektquelltextes (beim Laden der DLL) erzeugt (Visible nicht auf True gesetzt, kein Show aufgerufen), es funktioniert.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#5

AW: TTimer in DLL

  Alt 10. Nov 2023, 09:42
Ahhhhhhh, du willst es nich wissen.

Die alte CMD-Console war synchron, aber die neue Pseudo-Console ist asynchron,
da ich die Steuerbefehle noch nicht alle kenne, weiß ich noch nicht, wie ich auf's Ende des SubProzesses warten muß (weil da nichts in der Doku gefunden), also ist nach dem WriteFile noch keine Wartefunktion

leider ist das Prozessdesign für Einzelbefehle (ohne explizites Open) so, dass sofort das Close kam und der Timer und Handle freigegeben wurden.


Da es Vieles zu "Timer in DLL geht nicht" zu finden gab, hatte ich erstmal dort gesucht.


Delphi-Quellcode:
procedure TConsoleScript.ConsoleOutputTimer(Sender: TObject);
var
  Count: DWORD;
  Buffer: UTF8String;
begin
  if PeekNamedPipe(FOutputRead, nil, 0, nil, @Count, nil) and (Count > 0) then begin
    SetLength(Buffer, Count);
    ReadFile(FOutputRead, PAnsiChar(Buffer)^, Count, Count, nil);
    WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), PAnsiChar(Buffer)^, Count, Count, nil);
  end;
end;
Jetzt wird das aufgerufen

Mußte aber noch das and (Count > 0) anhängen, da selbst ein ReadFile mit Count=0 blockierend wartet, bis neue Daten rein kommen (von denen man aber "nichts" haben will)




PS: Im Prinzip ist die neue Console jetzt wieder fast so, wie früher unter DOS, also mit Escape-Befehlen im Stream, anstatt parallel mit zusätzlichen APIs (es gibt nur noch einen dritten Befehl, um die Größe des Fensters/Ausgabebereichs zu ändern).
Sowie es gibt "eigentlich" keinen StdErr, der ist farblich im StdOut mit drin.
Delphi-Quellcode:
function CreatePseudoConsole(size: COORD; hInput, hOutput: THandle; dwFlags: DWORD; out phPC: HPCON): HRESULT; stdcall;
function ResizePseudoConsole(hPC: HPCON; size: COORD): HRESULT; stdcall;
procedure ClosePseudoConsole(hPC: HPCON); stdcall;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (10. Nov 2023 um 09:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz