Výsledky 1 až 9 z 9

Téma: [C, Win32] volani DLL funkce na pozadi

  1. #1

    Standardní [C, Win32] volani DLL funkce na pozadi

    Lze nejak spustit z hlavniho programu (EXE) knihovni DLL funkci tak, aby bezela na pozadi? tedy aby se mi po volani z hl. programu hned vratila a ja bych pomoci jiny funkce obcas polloval jesi uz to dobehlo (jedna se o prenos dat po zmodemu v ty DLL). Nebo je to na windows utopie?

    Este me napada, ze bych udal dalsi EXE kery by volal fci z DLLky a tento pomocny EXE bych spustil pres CreateProcess(), ale to uz mi pride moc vobstrukce...

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

  2. #2

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    pro paralelni soubeh se pod win i linuxem pouzivaji vlakna (thready).
    dej si hlavne pozor na sdileni promennych mezi thready - k tomu se pouzivaji mutex a semafory (semaphores)
    M.
    Naposledy upravil mudboy; 17.05.2009 v 22:49.
    AMD Barton 2500+@2152MHz(12.5*172/1,65V) AQXFA 0335MPMW @ ASUS A7V8X full @ Cooper Silent 2 TC Rev.2 lapped@ 512MB DDR333 @ GeForce 4 Ti4200 128MB 310/610MHz @ Samsung SpinPoint 160GB S-ATA + WD 80GB JB 8MB @ DVD LG GSA-4163B @ DVD Pioneer 106s @ SB Audigy Player @ Fortron 350W+12cm fan @ Edimax EW-7128G
    Mobile : DELL Inspiron 1520

  3. #3

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    aka utopie?, pouzi jednoducho vlakno

  4. #4

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    OK a jak mam teda zavolat funkci z DLLky, aby se spustila v dalsim vlakne?
    Jde o volani jediny funce s 3 parametry, dale DLLka obsahuje funkci kera vraci
    stav prenaseneho souboru a tak se muzu dovedet ze uz se prenesl cely.
    Naposledy upravil RayeR; 18.05.2009 v 11:45.

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

  5. #5
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    322

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    Spustil bych si klasicky dalsi vlakno ve svem programu a v nem zavolal fci z dll a pak zjistoval tou druhou fci z dll stav.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  6. #6

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    Citace Původně odeslal Anduril Zobrazit příspěvek
    Spustil bych si klasicky dalsi vlakno ve svem programu a v nem zavolal fci z dll a pak zjistoval tou druhou fci z dll stav.
    Ok, takze pres CreateThread()? Hledam naky pouzitelny priklad, kdyby nekdo mel... (win32 api moc neznam)

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

  7. #7
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    322

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    Pouzil bych radeji _beginthread, resp. _beginthreadex, pokud lze a pouzivas normalni c/c++ runtime.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  8. #8

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    Tak uz se mi povedlo vytvorit tred:

    Kód:
     h_zmodem_thread = CreateThread(NULL,0,zmodem_thread,&zmodem_thread_arg,0,&zmodem_thread_id); // default security attributes, default stack size, thread function, arguments, default creation flags, returns the thread identifier
    zatim jen pokusny:

    Kód:
    unsigned long WINAPI zmodem_thread(LPVOID iValue)
    {
      // this function is executed by the thread
      int i;
      // zde zavolat zmodem_send_file(...);
      for (i=0; i<100; i++)
        {
        printf("thread\n");
        Sleep(100);
        }
      ExitThread(0);
    }
    este potrebuju vykoumat jak funguje predavani argumentu

    EDIT: predavani argumentu je v poho pres voidpointer, kery si pretypuju na char (volam se jmenem souboru)
    ale este jak precist navratovou hodnotu po skonceni tredu?

    EDIT2: jo tak uz vim
    Kód:
      GetExitCodeThread(h_zmodem_thread,(unsigned long *)&tx_size);
    Naposledy upravil RayeR; 18.05.2009 v 20:25.

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

  9. #9

    Standardní Re: [C, Win32] volani DLL funkce na pozadi

    Tak nakonec to dopadlo nak takle:

    Kód:
    //***************** vlakno ZModem prenosu, ktere je spusteno na pozadi, vola funkci zsend_file() z DLL
    unsigned long STDCALL zmodem_thread(LPVOID fname)
    {
      ...
      tx_size=zsend_file(com_port,(char *)fname,sname); // posli soubor, funkce si sama otevre a zavre port
      ...
      ExitThread(tx_size);                 // ukonci vlakno a vrat skutecne prenesenou velikost dat
    }

    Kód:
    //***************** provede upload daneho souboru po ZModemu *****************
    int zmodem_upload(char *fname)         // vrati 0 pokud vse OK
      {
      FILE *zfile;                         // soubor pro prenos ZModemem
      HANDLE h_zmodem_thread;              // handle na nove vlakno ZModem prenosu
      unsigned long zmodem_thread_id;      // ID noveho vlakna ZModem prenosu
      long zfile_size;                     // velikost prenaseneho souboru
      long tx_size;                        // skutecne prenesena velikost
      long cnt;                            // pocitadlo prenosu 0-65535
    
      if (h_zdll==NULL)                    // pokud DLLka nebyla nactena
        {                                  // loadni zmodem.dll
        if ((h_zdll=LoadLibrary("zmodem.dll"))==NULL)
        ...
    
      printf("\nZModem uploading file %s [%lu B]\n",fname,zfile_size);
      zclear_gauge();
      if ((h_zmodem_thread=CreateThread(NULL,0,zmodem_thread,fname,0,&zmodem_thread_id))==NULL) // default security attributes, default stack size, thread function, ptr to arguments, default creation flags, returns the thread identifier
        {                                  // pokud se nepodarilo vytvorit vlakno ZModem prenosu
        printf("\nERROR: cannot create ZModem thread\n");
        return(-3);                        // tak skonci
        }
      while ((cnt=zreturn_gauge())<65535)  // pokud pocitadlo prenosu nedojelo na konec
        {                                  // vypis procenta prenosu
        printf("\rtransfered: %u%%",zreturn_gauge()/655);
        Sleep(100);                        // a mezitim cekej
        }
      printf("\rtransfered: %u%%",zreturn_gauge()/655); // vypis posledni cteni ukazatele (100%)
      WaitForSingleObject(h_zmodem_thread,INFINITE); // pockej pro jistotu na ukonceni threadu
      GetExitCodeThread(h_zmodem_thread,(unsigned long *)&tx_size); // precti navratovou hodnotu threadu
      ...
    }

    Gigabyte GA-P67-DS3-B3, Core i7-2600K@4,5GHz, 2xKingston 2GB/1866MHz/CL11, Leadtek 7900GT-256MB DDR3 + Accelero S1, SB-Audigy + YMF724 + DreamBlaster combo, tuner FlyDVB duo, SSD Samsung 840 Pro 128GB + WD1003FBYX RE4 1TB, Seasonic S12II-430, 21" NEC 2190UXp, DVD-RW NEC 4550A->4551A mod, CD-RW Teac 524E, ZIP100, FDD, Canon PowerShot A70, A95+hacked firmware, EOS 350D+CHDK, Pentax K-30, Galaxy S3+CM13, HP ipaq 214, HP 200LX.
    2nd PC: Gigabyte GA-P31-DS3L with custom BIOS, Core2 Duo E8600@4,0GHz, 2xKingston 2GB/1066MHz/CL5
    3rd PC: Abit BX133-Raid, Tualatin 1300@1733/133/1,65V, 2x256MB. WEB: http://rayer.g6.cz

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •