Anonymní profil Martin – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Martin – Programujte.comAnonymní profil Martin – Programujte.com

 

Příspěvky odeslané z IP adresy 193.48.172.–

Martin
C / C++ › IPC, sdilena pamet meyi proc…
10. 1. 2012   #152188

Zkousel jsem toto reseni

typedef struct buffer {
	int numberOfFullBaskets;
	int size;
	int currentIndex;
	char myArray[NB][255];
};

string message = "Moje hodnota" + to_string(i);

strcpy(myBuffer->myArray[myBuffer->currentIndex], message.c_str());

a to se zda byt funkcni. jen jsem neporozuměl proč konstatní řetězec byl dostupný v hlavním procesu. 

Martin
C / C++ › IPC, sdilena pamet meyi proc…
10. 1. 2012   #152187

Vicemene je to tak. Mam pole pointeru. V podprocesu jeden z nich nastavim na konstantni retezec. Tento retezec je dostupny v hlavnim procesu, ve kterem vytvarim podprocesy. 

Pri nastavovani konstantniho retezce bych rad pripojil jeste nejaky integer. 

Martin
C / C++ › IPC, sdilena pamet meyi proc…
10. 1. 2012   #152184

Ahoj,

 vytvarim procesy a nasdilele jsem si kus strukturu.

typedef struct buffer {
	int numberOfFullBaskets;
	int size;
	int currentIndex;
	char * myArray[NB];
};

buffer *myBuffer;

...

int shmId = shmget(IPC_PRIVATE, sizeof(buffer), IPC_CREAT|0666);
myBuffer = (buffer*) shmat(shmId, 0, 0);

...
myBuffer->size = 0;
myBuffer->numberOfFullBaskets = 0;
myBuffer->currentIndex = 0;

Vsechny procesy mohou cisty promene size, numberOfFullBaskets, currentIndex... problem mam se s polem pointeru char * myArray[NB]. 

Pokud v procesu pouziju tento zapis, tak si vsechny podprocesy mohou precit hodnotu na danem indexu. Tento zapis funguje dle ocekavani.

myBuffer->myArray[myBuffer->currentIndex] = "Moje hodnota";

jen bych k retezci "Moje hodnota" potreboval pridat hodnotu promene. Treba hodnotu iteratoru (int). Toto uz nefunguje. Dojde k jeho preruseni, kompilace probehne ale v poradku.

string message = "Hodnota indexu: " + to_string(i);

strcpy(myBuffer->myArray[myBuffer->currentIndex], message.c_str());

Nevite, jak k retezci "Moje hodnota" pridat jednodusse hodnotu promenne i? Diky

Martin
C / C++ › Konverze iteratoru na pointer
15. 12. 2011   #151310

Díky,  funguje také.

Martin
C / C++ › Konverze iteratoru na pointer
15. 12. 2011   #151306

I když tomu tak nevypadá, vlasnít list jsme implementovali nedávno. Z nejakeho duvodu jsem se domnival, ze vsechny pointery budou nutne za sebou. Díky za všechny odpovědi. 

Zkoušel jsem tento kód a když nefungoval, tak jsem hledal jiné řešení.

Person *p;
p = &(*it); // chyba kompilace, cannot convert ‘Person* const*’ to ‘Person*’

Pomohlo

Person *p;
p = &**it;
Martin
C / C++ › Konverze iteratoru na pointer
15. 12. 2011   #151298

Ahoj, diky moc.

list<Person*> persons;

Person *p;

p = persons.front()

uvedené řešení funguje dobře. Teď když mám pointer na první prvek, je možné se posunout na i-ty prvek?

Mylně jsem se domníval, že by mohlo fungovat něco takového:

list<Person*>::const_iterator it; // meni se v cykluPerson *p;
p = persons.front();
list<Person*>::const_iterator first = this->persons.begin();
int dis = distance(first, it);
p = p + dis*sizeof(Person*);
Martin
C / C++ › Konverze iteratoru na pointer
15. 12. 2011   #151290

Ahoj, 

   mám list pointerů. Rád bych jej prošel a vrátil pointer na hledaný objekt (Person). Je možné převést iterator na pointer? Díky

   Stačilo by mi získat pointer na první prvek listu, pak by to snad šlo si vypomoct funkcí distance(). Díky, Martin.

list<Person*> persons;

Person *p  = &this->persons.begin().; // nefunkcni
	for (list<Person*>::const_iterator it = this->persons.begin(); it != this->persons.end(); ++it) {

}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý