DLL-ből indított szál probléma
2013-10-12T19:50:52+02:00
2013-10-13T13:49:10+02:00
2022-08-08T07:00:29+02:00
t_zoli
Sziasztok!

Készítettem egy DLL-t ami elindít egy szálat. A szál egy soros portot kezel és a válaszokat kéne a DLL-be visszaküldenem. A szál rendesen megy és teszi a dolgát. A problémám hogy a szálból nem tudom a DLL-be a bejövő adatokat visszaírni.

köszönöm
Mutasd a teljes hozzászólást!

  • A *.DLL nem külön processz, pont úgy működik, mintha a *.EXE része lenne. Szóval gondold át mégegyszer, hogy mit is szeretnél, és mi a kérdésed.
    Mutasd a teljes hozzászólást!
  • Leírom kicsit részletesebben:

    Van egy programom ami 5-6 eszközzel kommunikál folyamatosan ebből 3-4 soros pontos a többi usb-s. Minden eszközhöz írtam 1-1 dll-t az eszközre jellemző protokollal. Ez azért is fontos mert az eszközök néha cserélődnek így nem kell mindig belenyúlni a fő programba elég csak az eszköz dll-t cserélni.

    A első probléma az volt hogy néhány eszköz nagyon érzékeny az időzítésre pl. a kapott adatokat 5 ms-en belül nyugtázni kell. Minden dll-hez írtam külön kis teszt alkalmazást amivel ezek a dll-ek jól működtek. Mikor az egész rendszert összeraktam és minden eszköz folyamatosan kommunikál és a bejövő adatokat fel is kell dolgozni előfordul hogy több alkalommal is kifutok az időből hiszen a dll-ek nem külön processek.

    Ezért a dll-be írtam egy szálat. Sajnos a szálat nem tudom a főprogramból hívni mert akkor minden hardver változásnál bele kell nyúlni a főprogramba.

    A kérdésem az hogyan tudom a szálból a pl. soros portról beérkező adatok a dll-be átadni. Ha GUI-ból hívod a szálat akkor ott lehet szinkronizálva visszaírni. Dll-nél ezt hogy kell?
    Mutasd a teljes hozzászólást!
  • A szál memória területe azonos a DLL memória területével. Mivel a DLL indította. Innentől kezdve mi a kérdés? Ha a szálban van adat, akkor belerakja egy bufferbe, amit a DLL egy az app hívására kiolvas. Persze a szinkornizációt meg kell oldani, de mivel csak az egyik oldal ír, a másik olvas, nagyon nem bonyolult az eset.
    Mutasd a teljes hozzászólást!
  • A *.DLL nem külön processz, pont úgy működik, mintha a *.EXE része lenne. Szóval gondold át mégegyszer, hogy mit is szeretnél, és mi a kérdésed.

    Hadd tegyem hozzá, hogy minden szálat "DLL-hoz létre" nevezetesen a KERNEL32.DLL, amiben a CreateThread függvény van.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd