Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

prenos niza pokazivaca na fje u funkciju :)

[es] :: C/C++ programiranje :: prenos niza pokazivaca na fje u funkciju :)

[ Pregleda: 3563 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ana
Ana Balevic
LIACS & ACE
Amsterdam

Član broj: 5669
Poruke: 170
195.252.81.*

Jabber: ana@elitesecurity.org
Sajt: tesla.rcub.bg.ac.rs/~tauc..


Profil

icon prenos niza pokazivaca na fje u funkciju :)17.02.2004. u 15:05 - pre 244 meseci
Caos svima:) Radim neki projektic za fax i nesto mi nije jasno kako da u funkciju prenesem niz koji sadrzi pokazivace, i kako da prodjem kroz ceo taj niz ,a da pri tom funkciji ne dostavim br clanova niza. Jel ima neka standardna fora za to?

Meni je palo na pamet da zadnji clan u niz ne bude nista korisno nego 0, (kao kod stringova) medjutim to mi nesto ne deluje bas kao lepo resenje (mada radi)

evo sta treba da uradim tacno:Za skolski Kernel realizovati funkciju runConcurrently() koja kao parametar prima niz pokazivaca na globalne funkcije bez argumenata i pokrece po jednu nitnad svakom od tih funkcija.
-Pri tome imam konstruktor za Thread ovakav: Thread (void (*body)())
ja sam to resila ovako:
Code:

void (*f[5])();
f[0]=&threadBody;    //ovde su mi threadBody i f2 neke fje
f[1]=&f2;
f[2]=&f2;
f[3]=&f2;
f[4]=0;
runConcurrently(f);
--- gde je:
void runConcurrently(void (*f[])()) {
// void (*f[])() niz pokazivaca na fje (koje nemaju arg i ne vracaju nista)
 for(int i=0;f[i]!=0;i++) {
                        cout<<"Pravim novi thread za i="<<i<<"\n";
                        Thread* t=new Thread(f[i]);
                        cout<<"Startujem thread za i="<<i<<"\n";
                        t->start();
                }
}


Hvala! Anchie
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)17.02.2004. u 15:38 - pre 244 meseci
Ana, primer takvog prosledjivanja imas u maltene svakom mom primeru koji
sam ovde poslao - ja volim ovakvu main funkciju u svom C/C++ kodu:

Code:

#include <stdio.h>

int main(int argc, char** argv)
{
printf("Aplikacija: %s", argv[0]);
return 0;
} // main()


'argv' je ovde niz koji sadrzi nizove karaktera (stringove narodski
receno). Naravno NULL je uvek indikator da niz vise nema elemenata...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)17.02.2004. u 16:57 - pre 244 meseci
Citat:
ana:
Caos svima:) Radim neki projektic za fax i nesto mi nije jasno kako da u funkciju prenesem niz koji sadrzi pokazivace, i kako da prodjem kroz ceo taj niz ,a da pri tom funkciji ne dostavim br clanova niza. Jel ima neka standardna fora za to?

Meni je palo na pamet da zadnji clan u niz ne bude nista korisno nego 0, (kao kod stringova) medjutim to mi nesto ne deluje bas kao lepo resenje (mada radi)


Ako baš ne želiš da funkciji eksplicitno dostaviš i broj članova niza, onda ovo tvoje rešenje uopšte nije loše.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)18.02.2004. u 00:05 - pre 244 meseci
Moze i ovako...

Code:

typedef void (*PFNThreadFunc)();

std::vector<PFNThreadFunc> niz;

niz.push_back(f1);
niz.push_back(f2);
niz.push_back(f3);
...

runConcurrently(niz);
--------------------

void runConcurrently(std::vector<PFNThreadFunc>& f) 
{
 for(int i=0; i< f.size(); i++) 
 {
        Thread* t=new Thread(f[i]);
        t->start();
 }
}



Imam i pitanje... Ko ce da obrise sve ove silne thread-ove?

yooyo
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-3.dialup.nethere.net



+6 Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)18.02.2004. u 02:11 - pre 244 meseci
Ne verujem da vector dolazi u obzir u ovom slučaju - koliko sam razumeo, radi se o kernel-mode programiranju.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
*.dip.t-dialin.net



+7169 Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)18.02.2004. u 10:22 - pre 244 meseci
Anina ideja je sasvim OK za kernel programiranje - moj savet je da se umesto nule koristi neka druga vrednost - jer ako se ta lista pointera negde automatski puni, moze da se desi da nekom greskom neki pointer bude nula, a onda ce funkcija startovanja niti stati pre vremena (treba proveriti da li je ptr validan pre startovanja niti, naravno)

Napisi samo dve funkcije - ptrArrayAlloc(int num, void*ptrArray[]) i ptrArrayFree(void*ptrArray) koje ce raditi "bookeeping" tj. alocirati/dealocirati jedan clan vise i dodeljivati mu neku "magicnu" vrednost, recimo -1 koja ce oznacavati kraj niza.


2Leka - Trazeno je resenje >bez< broja clanova kao parametra funkcije - tvoj argc sluzi upravo tome, a pretpostavljati da je nula na kraju niza je opasno jer mozda ima i drugacijih CRT implementacija.
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)18.02.2004. u 13:31 - pre 244 meseci
Samo da napomenem, pošto sam prepoznao da se u primeru radi na školskom
kernelu za predmet „Programiranje u realnom vremenu“, da saveti u kojima
se koristi STL (dakle std::vector i slične stvari) neće raditi. STL
prosto nije na raspolaganju u implementaciji školskog kernela.

Zato mislim da je rešenje koje je OP dao u redu, uz dodatnu primedbu da
za školski kernel nije bitno što za nit ne postoji destruktor: memorija
se oslobađa automatski pri kraju rada.

f
 
Odgovor na temu

ana
Ana Balevic
LIACS & ACE
Amsterdam

Član broj: 5669
Poruke: 170
195.252.81.*

Jabber: ana@elitesecurity.org
Sajt: tesla.rcub.bg.ac.rs/~tauc..


Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)20.02.2004. u 16:47 - pre 244 meseci
da bas za Programiranje u realnom vremenu :) da nisi slucajno i ti uzeo taj predmet za izborni? :)

Hvala svima na savetima,ideja je bas bila da se ne prenese br clanova niza,i da se ne koristi nikakva kolekcija, mada sam bila ubedjena da postoji neki standardan programerski shtos kako se u tom slucaju prolazi kroz niz.
Ovo sa -1 mi se bas svidja tako da cu tako napraviti...
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: prenos niza pokazivaca na fje u funkciju :)20.02.2004. u 17:01 - pre 244 meseci
Evo idejica: kako nismo sigurni da pointer 0 ili -1 ne pokazuje na neku korisnu lokaciju, onda bi marker za kraj trebao da sadrži adresu samog sebe. Ta vrednost sigurno ne pokazuje na neki validan kod (jer je upravo koristimo za dotični pointer) a vrlo lako se proverava, ništa posebno teže.

while (&p != p)

itd...

f

p.s. Za nas je PRV bio obavezan predmet.
 
Odgovor na temu

[es] :: C/C++ programiranje :: prenos niza pokazivaca na fje u funkciju :)

[ Pregleda: 3563 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.