Newsgroup: it.comp.programmare.win32
Titolo: Bcb e componenti thread safe

Ciao a tutti, dopo aver letto la guida del Bcb mi sono sorti alcuni dubbi: 
nel paragrafo relativo al thread principale, viene spiegato chiaramente che 
non è possibile accedere direttamente alle proprietà od eseguire 
direttamente i metodi dei componenti di una applicazione, da un thread 
secondario, se non utilizzando il metodo Synchronyze, sino a qui è tutto 
chiaro, i dubbi mi vengono se decido di aggiungere una ipotetica variabile 
pubblica alla Form principale, a questo punto essa diventa una proprietà 
della form alla quale devo accedere necessariamente con Synchronize (sempre 
da un thread secondario intendo) ? Spiegano, proseguendo con la lettura, che 
per sincronizzare 2 thread differenti è possibile utilizzare le sezioni 
critiche (TCriticalSection) illustrano velocemente come funzionano i 2 
metodi Acquire e Relase, dicendo in poche parole di impostare una variabile 
globale ed utilizzarla per bloccare e sbloccare la sezione desiderata, e a 
questo punto il mio dubbio rimanne quello di prima, se dichiaro una varibile 
nella Form1 essa diviene una sua proprietà accessibile solo attraverso 
Synchronize ? Da quanto leggo solla guida non mi pare... ma la traduzione in 
italiano del documento non è eccezzionale e io purtroppo l' inglese lo 
mastico poco... Un altro esempio che mi viene in mente è questo, ho un 
thread secondario nel quale gira un particolare algoritmo che ad un certo 
punto deve chiedere conferma all' utente per una ipotetica azione, ora 
lasciando perdere il fatto che la parte di gestione dell' interfaccia 
grafica andrebbe sempre possibilmente demandata al thread principale, ora 
visto che, da quanto ho letto in giro, Application->MessageBox(...) non è 
thread safe dovrei utilizzarel' API MessageBox() che però come primo 
parametro mi richiede l' handle della finestra alla quale  far riferimento, 
nel mio ipotetico esempio la Form1, ma Form1->Handle è una  proprietà di 
Form1 dovrei allora utilizzare Sempre Synchronyze ? Altra domanda, l' 
accesso ad una unica variabile (es. int) da parte di 2 thread differenti 
deve essere sincronizzata ? Rileggendo in giro pare che se sul thread1 la 
scrivo dal thread2 posso leggerla tranquillamente in qulsiasi momento... a 
me pare strano vorrei avere delle conferme.
Grazie tante per avermi dedicato qualche minuto anche solo leggendomi.
Ciao God. 



 a me pare strano vorrei avere delle conferme.
Senza specificare il tipo di variabile, quindi parlando in 
generale, sì, l'accesso va sincronizzato. Poi per alcuni tipi 
lettura e scrittura possono essere atomiche. Dai anche 
un'occhiata alle "Synchronization Functions" (come 
Interlockedxxx): 
http://msdn2.microsoft.com/en-us/library/ms686360(VS.85).aspx
.
HTH,
-- 
Stefano Frosio
www.esse-effe.com

grafica andrebbe sempre possibilmente demandata al thread principale[...]
Ti blocco subito: non è una questione che puoi lasciar perdere. La GUI
va gestita da un solo thread, quello principale, ed è corretto che le
richieste verso l'utente vengano da esso. I thread devono lavorare e
non preoccuparsi dell'interazione. Se proprio devono "interagire",
devono farlo con altri thread, come, appunto, quello principale.
In linea generale, però, ti dò il consiglio più prezioso che possa
darti: usa le code di messaggi di Windows. La sincronizzazione
comporta problemi di dead-lock molto antipatici e l'uso delle code di
messaggi per far comunicare diversi thread è di gran lunga la tecnica
migliore. Vai di GetMessage()/PostThreadMessage() e vivi tranquillo.

 esempio separare le due parti di algoritmo?
Grazie innanzitutto per le delucidazioni, certo anche io opterei per la
separazione dell' algoritmo in diverse parti, intendevo lasciar perdere
questo fatto spacifico perchè è uno dei vari errori che si trovano
girovagando in rete... il quesito era piuttosto per capire se l' Handle
della Form pincipale fosse una sua proprietà vcl, e da quanto mi spieghi
che al limite si potrebbe utilizzare Synchronize, ne deduco che lo sia
;-)
Grazie ancora...
Salutoni God.

 migliore. Vai di GetMessage()/PostThreadMessage() e vivi tranquillo.
Ringrazio tanto anche te per la risposta, come spiegavo prima a Stefano, quello
che non capivo bene era se l' Handle della Form principale fosse una sua
proprietà (vcl) alla quale accedere con Synchronize ( o come spieghi tu con
qualche altro metodo di sincronizzazione ) l' esempio era campato in aria
prendendo spunto da esempi errati trovati in giro per la rete... ora non saprei
bene come implementare GetMessage() e PostThreadMessage()... esiste qualche
piccolo esempio corretto in giro da poter visionare  ? Non oso chiederti di
scrivermelo appositamente per non abusare della tua pazienza gentilezza e tempo
;-)
Ciao e garzie ancora God.

 che lo sia
Preciso solo che ho suggerito l'utilizzo di Synchronize come 
semplice soluzione per fare in modo che fosse il thread VCL a 
visualizzare il message box, non per accedere alle proprietà del 
form.
-- 
Stefano Frosio
www.esse-effe.com

vice. Afterwards
the Registrar concluded that the case had been got up by the watchman
to extort money from the women. But the establishment of their
innocence did not put them right again. Think of the horrible ordeal
and the dirty court details through which these young girls had been
put, on the testimony of a child of ten, and of a watchman determined
that they should learn to give him money when he demanded it, or he
would drive them into prostitution. One wonders how many hundreds of
respectable families were thus bled of their small incomes by the vile
informers who were being rewarded by Government for their extortion.
Imagine the terror that respectable Chinese women suffered, knowing
that any man might denounce them, out of malice, and thereby reduce
them to the very worst conceivable form of slavery! Within a few
years, nearly all the respectable Chinese women had disappeared from
Hong Kong. Chief Inspector Whitehead testified before the Commission:
"When an unlicensed brothel [i.e., a native house accused of being
such] is broken up, the women have to resort to prostitution in most
cases for a living." During 1869, one poor woman signed a bond to
deport herself for five years rather than be taken to the Lock
Hospital. But the "protected women," with their nursery of children
they were raising for brothel slavery, being the mistresses of
foreigners, were not persecuted in this manner, so, by a kind of mad
infatuation the Government seemed bent on encouraging and developing
immoral women and driving decent women either into prostitution, or,
by the reign of terror, out of the Colony. In 1869, five women
were charged before the Registrar General, and three of them were
discharged as innocent. Then the Registrar General decided _to make
the punishment of the first of the remaining two depend upon the state
of health of the second_. This second was examined and found diseased,
and in consequence of that fact, the first one was fined fifty dollars
or two months' imp

_them_ under control? It is perfectly apparent
to all that to license murder and stealing; would be the surest way of
allowing them to get quickly beyond control. "But you cannot make men
moral by act of parliament, and it is foolish to try; to put a man in
jail will not change him from a thief into an honest man." "But," you
reply, "we do not punish men for stealing and for murder for their own
good, but for the good of the community at large." Certainly. Then
what becomes of the argument that because men will not become pure by
act of parliament they are to be allowed to commit their depredations
unmolested? The primary object of law is not reformatory but
protective,--for the victims of lawlessness.
Our great Law-Giver, Jesus Christ, admitted a certain necessity of
evil, but He did not say, "therefore license it, to keep it within
bounds." He said, "It _must needs be_ that offenses come." But His
remedy for keeping the offenses within bounds was, "woe to that man by
whom the offense cometh." As inevitably as the offense was committed
so invariably must the punishment fall on the offender's head. That
is the only way to keep any evil within bounds. This is the principle
that underlies all law.
These Hong Kong officials who believed in the licensing of brothel
slavery and brought it about, have much to say about the "unfortunate
creatures" who were the victims of men. But if the advocate of license
is self-deceived in his attitude toward this social evil, we need not
be deceived in him. One does not propose a license as a remedy for an
evil, except as led to that view by secret sympathy with the evil.
A license of an evil is never proposed excepting upon the mental
acquiescence in that evil.
British officials who licensed immoral houses at Hong Kong did not
wi

I know that
    difficulties national, social, official and financial beset the
    Government in reference to the special questions I have raised,
    I have only to observe that I have never heard of those
    difficulties. My own impression is that the respectable parts
    of the community, Chinese as well as European, including the
    Government and the police, are fully alive to the brothel and
    domestic servitude systems, and as well informed as Sir John Smale
    himself as to the real facts. One would suppose from the tone
    of his pamphlet that he stood alone in his perception and
    denunciation of evil. But I believe the fact is that the Executive
    and the community generally are quite as anxious is he is to
    insist upon practical precautions necessary to prevent the abuses,
    and to diminish the evils naturally connected with these systems,
    but they look for this to practical securities and not to
    declamation. The obvious line of practical suggestions to take is
    that of careful registration and constant inspection of brothels,
    so that full and frequent opportunity may be given to all persons
    whose freedom may be open to suspicion to know their legal
    position, and to assert their liberty if they like ...
    Particularly it might be thought right to create a system