Výsledky 1 až 9 z 9

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

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    325

    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

  2. #2

    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

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

    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

  4. #4

    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

  5. #5

    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
  •