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.
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
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
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
Tak uz se mi povedlo vytvorit tred:
zatim jen pokusny: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
este potrebuju vykoumat jak funguje predavani argumentuKó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); }
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
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
Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)