Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Kako pronaci adresu nestaticke metode objekta klase.

  • 6 odgovora
  • 6.054 pregleda

Najnovija ↓

Kako pronaci adresu nestaticke metode objekta klase. 03.04.2007. u 01:29 · pre 238 meseci
izmenjeno 1 put, poslednji put Arbatash Vex 03.04.2007. u 01:59
  1. Arbatash Vex03.04.2007. u 01:59zapis iz teksta poruke
#1
Ja sam student ETF-a (racunarska tehnika i informatika) i pravim projekat "kernela" iz Operativnih Sistema 1.
Problem mi je kod sledeceg:
Na koji nacin mogu da dobijem stvarnu adresu nestaticke metode nekog objekta date klase, tj:
class Thread {
public:
void run();
};
Thread nit;


Kako naci adresu metode nit.run() tj adresu gde pocinje kod te metode kako bih mogao da je upisem u PCB

Moj asistent mi je rekao da napravim staticku medodu kojoj stavim objekat (nit) kao argument, i ona da mi pokrene run() metodu tog argumenta, a mogu da dobijem adresu staticke metode, to nije sprono. Ali kako da pomocu adrese objekta &nit i adrese staticke metode &(Thread::staticka_metoda) da dodjem do prave adrese metode run() za odredjeni objekat tipa Thread.
Inace radim u Borland C++ 3.1
Re: Kako pronaci adresu nestaticke metode objekta klase. 03.04.2007. u 14:22 · pre 238 meseci #4
Citat:
Arbatash Vex:  Ali kako da pomocu adrese objekta &nit i adrese staticke metode &(Thread::staticka_metoda) da dodjem do prave adrese metode run() za odredjeni objekat tipa Thread.


Funkcije članice klase imaju iste adrese za sve objekte. U praksi, poziv funkcije članice za neki objekat je ekvivalentno pozivu slobodne funkcije sa dodatnim argumentom this koja je prijatelj toj klasi.

Na primer:

Code:

string a;
string b;

a.append("prvi"); //ispod haube: append("prvi", &a);
b.append("drugi"); //ispod haube: append("drugi", &b);

Potpis
IOCC
Re: Kako pronaci adresu nestaticke metode objekta klase. 03.04.2007. u 14:48 · pre 238 meseci #5
Znaci slaba vajda od moje zelje.
Onda nemam pojma kako da upisem u PCB stvarnu adresu odakle mi pocinje odredjena nit, posto mi je to najvaznije za multithreading.
Na zalost, ne daju nam vise da to radimo u C-u inace bi bilo mnogo lakse.
Re: Kako pronaci adresu nestaticke metode objekta klase. 03.04.2007. u 15:11 · pre 238 meseci #6
Izvini na neznanju, a šta je to PCB?

Inače, možeš i u C++u da koristiš slobodne funkcije, zar ne? Ako ti ne daju, onda uradiš trik sa statčikom funkcijom koja primi adresu objekta kao argument, kastuje adresu u pointer na odgovarajući objekat i onda pozove članicu tog objekta.

Pogledaj recimo ovaj članak - ima i mnogo više nego što ti treba: http://www.codeproject.com/win32/callback_adapter.asp

Potpis
IOCC
Re: Kako pronaci adresu nestaticke metode objekta klase. 03.04.2007. u 16:08 · pre 238 meseci #7
PCB je struktura/klasa u kojoj se cuva kontekst procesa za neki odredjeni thread. Najcesce se u njemu cuva PC, SP, BP i procesorski registri, u slucaju da se ne cuvaju na steku, sto je bolja varijanta.
Svaki objekat Thread klase ima svoj PCB. Kada se stvara proces, u PCB.PC se upise pocetna adresa run() funkcije. I kad taj thread dodje na red za izvrsavanje funkcijom dispatch() se "nasilno" na stek push-ne adresa gde treba da se vrati kad zavrsi dispatch() (pocetnu adresu funkcije run()). Pa umesto da se vrati na sledecu funkciju posle dispatch() on skoci na run i pocne da je izvrsava sve dok se nekim interrupt-om ne prekine i da procesor drugom threadu.

Ukratko. Moramo da napravimo implementaciju niti u c++, a posle i simulaciju kernela pod windowsom, ali smemo da koristimo samo standardne staticke .h fajlove.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme