![]() |
HideCaret in einem Thread?
folgendes, ich möchte gerne meine ersten threading versuche machen und bin teilweise daran gescheitert ._.
mein thread:
Code:
und mein aufruf:
Unit caretthread;
interface uses classes, windows; type Tcaretthread = Class(TThread) private frm: Cardinal; protected procedure execute; override; public constructor create; virtual; procedure sethandle(carethwnd: cardinal); virtual; end; implementation procedure Tcaretthread.execute; var b: boolean; begin b:=false; while b=false do hidecaret(frm); end; procedure Tcaretthread.sethandle(carethwnd: Cardinal); begin frm := carethwnd; end; constructor Tcaretthread.create; begin inherited create(true); freeOnTerminate := true; end; end.
Code:
ob es sinnvoll ist, ist mal dahingestellt :D
caret := Tcaretthread.create;
caret.sethandle(richedit1.handle); caret.resume; ist mein erster versuch mit threads und deshalb gehe ich auch davon aus das er sehr reich an fehlern ist was ich nun nicht verstehe ist, wenn ich die zeile while b=false do hidecaret(frm); in while b=false do beep(1000, 100); abändere funktioniert das ganze |
Re: HideCaret in einem Thread?
Triift das zu:
Zitat:
|
Re: HideCaret in einem Thread?
hm blöd aber ergibt eigentlich sinn
wäre ja schlimm wenn irgendwelche schadsoftware meinen geliebten caret verschwinden lässt :D vielen dank |
Re: HideCaret in einem Thread?
Moin 1234588,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Was mir als erstes ins Auge sticht:
Delphi-Quellcode:
Sollte besser heissen:
while b=false do
Delphi-Quellcode:
Der direkte Vergleich würde hier wohl funktionieren, aber zum einen ist die zweite Variante gemeinhin lesbarer, zum anderen kann man sich u.U. Probleme einhandeln, wenn man sich daran gewöhnt so zu vergleichen, da, i.d.R. false als 0, true aber als <> 0 verstanden wird.
while not b do
Ich bin mir nicht ganz sicher, ob Deine Vorgehensweise garantiert sicher funktioniert. Du greifst mit HideCaret auf eine VCL-Komponente (TRichEdit) zu. Dies sollte man aber nur über die Thread-Methode Synchronize tun, da die VCL-Komponenten nicht garantiert thread-safe sind. Der Zugriff erfolgt zwar indirekt, über Handle, aber es könnte sein, dass das dennoch zu Problemen führt. (wie gesagt: Sicher bin ich mir nicht). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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