GetNextFileNameForViewer vrací FALSE a scrBusy je TRUE
- stepand76
- Plugin Developer
- Posts: 455
- Joined: 16 Apr 2007, 21:22
- Location: Pardubice, Czech Republic
GetNextFileNameForViewer vrací FALSE a scrBusy je TRUE
GetNextFileNameForViewer vrací FALSE a scrBusy je TRUE
Při ladění chvíli (cca půl vteřiny) trvá, než se to z té funkce dostane. Když jsem zkusil nastavit nesmyslný srcUID tak je volání proběhne okamžitě, ale to je mi k ničemu.
Je to tak se všemi ostatními funkcemi pro viever:
GetPreviousFileNameForViewer
IsFileNameForViewerSelected
SetSelectionOnFileNameForViewer
Proč je to zaneprázdněné? Jde o normální file system (C:\Zumpa), žádný archiv, nebo síťová jednotka.
Dáte mi tip?
Díky
Při ladění chvíli (cca půl vteřiny) trvá, než se to z té funkce dostane. Když jsem zkusil nastavit nesmyslný srcUID tak je volání proběhne okamžitě, ale to je mi k ničemu.
Je to tak se všemi ostatními funkcemi pro viever:
GetPreviousFileNameForViewer
IsFileNameForViewerSelected
SetSelectionOnFileNameForViewer
Proč je to zaneprázdněné? Jde o normální file system (C:\Zumpa), žádný archiv, nebo síťová jednotka.
Dáte mi tip?
Díky
-
- ALTAP Staff
- Posts: 5229
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
- stepand76
- Plugin Developer
- Posts: 455
- Joined: 16 Apr 2007, 21:22
- Location: Pardubice, Czech Republic
Ano, zlobí.Jan Rysavy wrote:Zkuste prosím adresář Zumpa promazat, aby obsahoval pouze jediný (prohlížený) soubor. Nastavte do tohoto adresáře oba panely. Zlobí to také?
Zlobí to i mimo debugger.Jan Rysavy wrote:Zlobí to pouze během ladění nebo i spuštěné mimo debugger?
Nezdržujte se tím moc, určitě dělám něco špatně, protože by jinak nepracovaly ani ostatní prohlížecí pluginy.
-
- ALTAP Staff
- Posts: 5229
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
Petr se na to podíval a zjistil, že funkce nefunguje z hlavního threadu. Všechny naše viewery (kde se funkce používá) běží ve vlastních vláknech. Zároveň musí hlavní vlákno běžet (aplikační smyčka), aby se distribuovaly zprávy.
Musíme toto buď dopsat do komentáře nebo se pokusit funkci upravit tak, aby fungovala z hlavního vlákna.
Je to Váš případ? K čemu funkci používáte, píšete viewer?
Musíme toto buď dopsat do komentáře nebo se pokusit funkci upravit tak, aby fungovala z hlavního vlákna.
Je to Váš případ? K čemu funkci používáte, píšete viewer?
- stepand76
- Plugin Developer
- Posts: 455
- Joined: 16 Apr 2007, 21:22
- Location: Pardubice, Czech Republic
Je to můj případ. Přiznám se, že jsem to trochu tušil. Ale v demopluginu v SDK je (sice zakomentovaná) verze pro volání z hlavního vlákna, tak jsem si říkal, že to třeba fungovat má.Jan Rysavy wrote:Petr se na to podíval a zjistil, že funkce nefunguje z hlavního threadu. Všechny naše viewery (kde se funkce používá) běží ve vlastních vláknech. Zároveň musí hlavní vlákno běžet (aplikační smyčka), aby se distribuovaly zprávy.
Musíme toto buď dopsat do komentáře nebo se pokusit funkci upravit tak, aby fungovala z hlavního vlákna.
Je to Váš případ? K čemu funkci používáte, píšete viewer?
Nechám to na vás co s tím uděláte, ale asi bych hlasoval pro to aby tyto funkce bylo možné volat i z primárního vlákna.
Píšu viewer. Až na toto je funkční.
Díky za podporu.
-
- ALTAP Staff
- Posts: 5229
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
Provozováním prohlížeče v hlavním vlákně Salamandera narazíte určitě na další problémy. Jen tak letmo vidím dva: vlastní message loop by se Vám hodila pro chod akcelerátorů. Viz standardní implementace v našich prohlížečích.
Další problémy očekávám při zavírání Salamandera, kde se explicitně žádají o zavření všechna okna prohlížečů a neočekává se, že by neběžely ve svých vláknech.
A to jsem raději nedělal audit aplikační smyčky Salamandera, ta je celkem pekelná, 300 řádků dlouhá. Šance, že bude dělat pro Vás něco nechtěného, je značně vysoká.
Zkrátka provoz vieweru z vlákna Salamandera je neodladěná věc, kde budete narážet. Z hlediska technologického jde o podřadné řešení proti běhu ve více vláknech. Máte nějaký důvod, proč nepřevzít implementaci z demopluginu?
Další problém vidím v tom, že pokud bude hlavní vlákno Salamandera zaneprázdněné (stačí například stisknout Ctrl+Shift+F10 v rootu disku), Váš prohlížeč se přestane překreslovat a bude vypadat zakouslý.MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
if (!window->IsMenuBarMessage(&msg) &&
!TranslateAccelerator(window->HWindow, ViewerAccels, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Další problémy očekávám při zavírání Salamandera, kde se explicitně žádají o zavření všechna okna prohlížečů a neočekává se, že by neběžely ve svých vláknech.
A to jsem raději nedělal audit aplikační smyčky Salamandera, ta je celkem pekelná, 300 řádků dlouhá. Šance, že bude dělat pro Vás něco nechtěného, je značně vysoká.
Zkrátka provoz vieweru z vlákna Salamandera je neodladěná věc, kde budete narážet. Z hlediska technologického jde o podřadné řešení proti běhu ve více vláknech. Máte nějaký důvod, proč nepřevzít implementaci z demopluginu?
- stepand76
- Plugin Developer
- Posts: 455
- Joined: 16 Apr 2007, 21:22
- Location: Pardubice, Czech Republic
Díky za informace.
Co se týče běhu prohlížeče v hlavním vlákně mám tyto postřehy:
Každopádně vás nechci nutit k nějakým zásadním úpravám, kvůli mému prohlížecímu pluginu. Nicméně musím říci, že práci by mi to usnadnilo.
PS: Pokud se v něčem pletu, tak se omlouvám.
Plugin píšu v Delphi. Jak známo VCL (vizuální knihovna komponent pro Delphi) není thread-safe. Takže to je důvod. Vyzkouším, zda by šlo alespoň všechna okna prohlížeče přesunout do jednoho (separátního) vlákna.Jan Rysavy wrote:Máte nějaký důvod, proč nepřevzít implementaci z demopluginu?
Co se týče běhu prohlížeče v hlavním vlákně mám tyto postřehy:
Nevím jak v CPP, ale v Delphi má každé okno svoji vlastní smyčku zpráv, takže se o to nemusím starat.Jan Rysavy wrote:vlastní message loop by se Vám hodila pro chod akcelerátorů.
Ano, to máte pravdu.Jan Rysavy wrote:Další problém vidím v tom, že pokud bude hlavní vlákno Salamandera zaneprázdněné (stačí například stisknout Ctrl+Shift+F10 v rootu disku), Váš prohlížeč se přestane překreslovat a bude vypadat zakouslý.
Okna prohlížečů mám ve vlastním seznamu a pokud jsou otevřená a dojde k uvolnění pluginu (unkončení Salamandera) uvolním je.Jan Rysavy wrote:Další problémy očekávám při zavírání Salamandera, kde se explicitně žádají o zavření všechna okna prohlížečů a neočekává se, že by neběžely ve svých vláknech.
Každopádně vás nechci nutit k nějakým zásadním úpravám, kvůli mému prohlížecímu pluginu. Nicméně musím říci, že práci by mi to usnadnilo.
PS: Pokud se v něčem pletu, tak se omlouvám.
-
- ALTAP Staff
- Posts: 5229
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
Pokud byste si založil nové vlákno s vlastní message loop a z něj řídil všechna okna Vašiho vieweru, nebude vadit, že VCL neni thread safe. Nebudete s nikým kolidovat a kdyby se něco málo naskytlo, ošetříte to místo synchronizací.
Ještě bych se chtěl zeptat na toto:
Ještě bych se chtěl zeptat na toto:
Které místo v kódu máte přesně na mysli?Ale v demopluginu v SDK je (sice zakomentovaná) verze pro volání z hlavního vlákna, tak jsem si říkal, že to třeba fungovat má.
- stepand76
- Plugin Developer
- Posts: 455
- Joined: 16 Apr 2007, 21:22
- Location: Pardubice, Czech Republic
Ano tak jsem to myslel. Pokusím se to udělat a uvidíme.Jan Rysavy wrote:Pokud byste si založil nové vlákno s vlastní message loop a z něj řídil všechna okna Vašiho vieweru, nebude vadit, že VCL neni thread safe. Nebudete s nikým kolidovat a kdyby se něco málo naskytlo, ošetříte to místo synchronizací.
Měl jsem na mysli kus kódu v souboru viewer.cpp za komentářemJan Rysavy wrote:Které místo v kódu máte přesně na mysli?
Code: Select all
varianta spusteni threadu vieweru bez pouziti objektu CThread
-
- ALTAP Staff
- Posts: 5229
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
Nic se neděje, Demoplug už je stará věc. Pro SDK 2.52 máme připravený aktualizovaný a zeštíhlený Demoview (a ve frontě čekají další demo pluginy). To ale ještě chvíli potrvá.stepand76 wrote:ale teď vidím, že jsem to špatně pochopil. Omlouvám se.Code: Select all
varianta spusteni threadu vieweru bez pouziti objektu CThread