Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Vse drugo, kar ne spada v nobeno zgornjo kategorijo.
ac
Prispevkov: 415
Pridružen: 12.09.2002 13:01:38

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a ac » 10.02.2010 19:21:21

Imam thread, tam pa preverjam, ali moram zgenerirati nek report. Če je na reportu DBRichView, naredi vse kot je treba, samo forma se ne odziva več. Če nekako poženem še enkrat sledečo kreiranje mi javi 1400 Invalid Window Handle. Probal sem že nekaj možnosti, vendar pa nevem kaj "zjebe" ta kontrola, da se forma ne odziva več. Application.Handle je ob začetku in koncu isti.

Sesuje se pri PrintToDevices, Devices je pa pdf stream. Za reporte, ki nimajo te kontrole dela vse normalno.

Kako bi se lotil problema?
Hvala!

lp, anze

GJ
Prispevkov: 1078
Pridružen: 13.03.2004 12:34:48

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a GJ » 10.02.2010 23:14:22

Očitno thread ni threadsafe...

LP :D GJ
Kdor se zadnji smeje, se smeje zadnji!

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a odisej » 10.02.2010 23:57:29

Ker sem ravno svoj reporter prirejal, da je thread safe, bi rekel, da za tiskanje rich view tale report uporabi kar rich kontrolo (kot sem imel sam včasih), ta pa ni thread safe in ti zjebe situacijo.

GJ
Prispevkov: 1078
Pridružen: 13.03.2004 12:34:48

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a GJ » 11.02.2010 00:24:54

Ker sem ravno svoj reporter prirejal, da je thread safe, bi rekel, da za tiskanje rich view tale report uporabi kar rich kontrolo (kot sem imel sam včasih), ta pa ni thread safe in ti zjebe situacijo.
Povsem narobe razumeš...
Vsak thread je sam zase threadsafe, kako pa si dva threada med seboj delita podatke (spomin) je pa druga zgodba...

LP GJ
Kdor se zadnji smeje, se smeje zadnji!

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a odisej » 11.02.2010 07:36:59

Verjetno res razumem narobe. Dejstvo pa je (sprobano), da če pri reportu v threadu kreiram TRichEdit, so problemi. Zakaj točno, ne vem.

GJ
Prispevkov: 1078
Pridružen: 13.03.2004 12:34:48

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a GJ » 11.02.2010 09:15:53

Če rečemo da je nek thread threadsafe, tukaj ne mislimo direktno na thread kot thread, ker je vsak thread sam zase vedno threadsafe, to ti namreč garantira vsak prevajalnik in seveda API. Če rečemo threadsafe govorimo/mislimo o načinu komunikacije med dvema ali več threadi. Nek thread je torej threadsafe, če komunicira s 'svetom' na thread safe način. Za kar pa seveda obstajajo razni standardni in nestandardni mehanizmi. Ko kličeš VCL iz nekega threada se moraš tega zavedati, ker se VCL zmerom izvaja v 'program application' threadu. Tukaj verjetno najlažje pridejo v poštev windows messages. Če so standardne rešitve prepočasne pol pa gabrova OTL. :)

LP GJ
Kdor se zadnji smeje, se smeje zadnji!

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a odisej » 11.02.2010 09:54:52

A lahko pol rečem TRichEdit ni thread safe? Sumim, da je nekako povezan z glavno nitjo, kar pa si v threadu ne želimo.

ac
Prispevkov: 415
Pridružen: 12.09.2002 13:01:38

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a ac » 11.02.2010 10:04:44

A lahko pol rečem TRichEdit ni thread safe? Sumim, da je nekako povezan z glavno nitjo, kar pa si v threadu ne želimo.
Jap, nekaj takega mora biti. Morda kdo ve kako je povezana?

lp, anze
Zadnjič spremenil ac, dne 11.02.2010 10:06:05, skupaj popravljeno 1 krat.

GJ
Prispevkov: 1078
Pridružen: 13.03.2004 12:34:48

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a GJ » 11.02.2010 10:25:24

A lahko pol rečem TRichEdit ni thread safe? Sumim, da je nekako povezan z glavno nitjo, kar pa si v threadu ne želimo.
Seveda je povezan z glavno nitjo, vsa osveževanja programskega okna (screena) potekajo preko glavne niti.
Iz česar sledi, da kontrole TRichEdit (to velja na splošno za celotno VCL) ne smeš kreirati izven program application threada. Ampak to smo ti že nakajkrat povedali.
Če hočeš doseči, da bo program 'threadsafe' potem moraš kreirati TRichEdit v glavnem threadu, ostali threadi pa zgolj komunicirajo s tem TRichEdit-om preko 'winows messages' oziroma na kakšen drug varen način.

LP GJ
Kdor se zadnji smeje, se smeje zadnji!

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Thread -> ReportBuilder -> DBRichView -> Print -> glavna aplikacija se ne odziva

Odgovor Napisal/-a odisej » 11.02.2010 12:36:41

V osnovi sem mislil, da če TRichEdit kreiraš v threadu in je neviden, ne bo komplikacij. Ampak očitno ni tako.

Sicer pa se probam držati tega, kar strici so mi povedali. Zaenkrat izgleda uspešno. Hotel sem le povedati ac-ju nekaj kar sem mislil, da vem,pa sem se očitno napačno izrazil. Ali pa samo vem.

Odgovori