*ako predam HODNOTU z child procesu do parent procesu
Příspěvky odeslané z IP adresy 188.167.242.–
Chcel by som v C vytvorit program, ktory by vyuzival pri vypocte napr prvocisel, vsetky dostupne jadro -> cim by sa mal program zrychlit.
Bolo mi poradene pouzit funkciu fork(), ale nepochopil som uplne niektore veci:
1.ako predam funkciu z child procesu do parent procesu?
2.co vlastne funkcia fork() robi? vytvara nove procesy? ci threats? nie je to v podstate to iste?
Snazim sa o nieco taketo:
pid_t pid;
pid = fork();
if(pid >= 0){
if(pid == 0){
hladam prvocislo;
ak najdem prvocislo, chcem predat to prvocislo
}
else {
ak som hore nasiel prvocislo v tomto procese zistujem, ci prvocislo je aj mersennovo prvocislo
}
}
Rad by som na svojom pc spustil tento kod
#include <stdio.h>
#include <time.h>
#include <omp.h>
int main() {
double start, end;
double runTime;
int num = 1,primes = 0;
int limit = 1000000;
start = omp_get_wtime();
#pragma omp parallel for schedule(dynamic) reduction(+ : primes)
for (num = 1; num <= limit; num++) {
int i = 2;
while(i <= num) {
if(num % i == 0)
break;
i++;
}
if(i == num)
primes++;
// printf("%d prime numbers calculated\n",primes);
}
end = omp_get_wtime();
runTime = end - start;
printf("This machine calculated all %d prime numbers under %d in %g seconds\n",primes,limit,runTime);
return 0;
}
a vyuzil pri nom vsetky moje jadra avsak visualko mi zatazi iba jedno a to konkretne 2.
Nasiel som si nejaky rady tupu pridat /MP(project/properties/C/command line) ale zatial nic nefunguje
Preto budem rad, ak sa najde niekto, kto nieco take ma na svojom pc nastavene a povie mi ako to nastavit
uz som vsetko pochopil
update nahradil som funkcia(&subor, &pocetzaznamov) na naplnanie pola tvojou verziu pole2 = funkcia(&subor, &pocetzaznamov) a uz mi to funguje, teraz len v com je rozdiel medzi funkcia(&subor, &pocetzaznamov) a pole2 = funkcia(&subor, &pocetzaznamov)?
#9 z
*** pole je uz pre mne prilis komplikovane, ak mi nieco funguje/nefunguje tak uz ani netusim preco a zvrhava sa to len na tu pridam hviezdicku a skusim spustit/tu odoberem a skusim spustit...
s tou druhou moznostou sa uz hram asi 2h, ale este som neprisiel nato co a ako...
#7 Romeritton
Tomu rozumiem, malo by to byt asi takto pole2D[][X], ale ja tie rozmery dopredu neviem, viem ich az po vykonani prikazov vo funkcii
z toho mi asi jedina moznost vychadza, v prvej funkcii kde pole alokujem a nacitavam donho prvky len ako lokalnu premennu predavat ho cez return?
proste ide mi o to, ze mam funkciu, v ktorej si definujem 2rozmerne pole, neskor mu alokujem pamat, nacitam don data a potrebujem ho predat inej funkcii, samozrejme s datami v nom
a ked mam 2rozmerne pole ako parameter funkcie napr.
void funkcia (FILE **f, char **pole2D){
alokuje a naplnim pole2D
}
ako ho pouziijem v inej funkcii? napr.
void vypis(char **pole2D){
vypis pole2D
}
Lebo nejak mi to nefunguje, ani ak zmenim void funkcia na char funkcia a dam return **pole2D a potom toto pole chcem vypisat v ine funkcii, stale mi to pise, ze pole2D je prazdne...
Vdaka, uplne presne si to trafil.
*navyse teraz uz viem, ze pole[10] = "string" nie je retazec, ako som sa to ucil ale pole charov
*len oprava chyb co som napisal
Preco, ked si necham vypisat pole2D[x] v ramci cyklu je tam spravny retazec, ale po skonceni cyklu su na vsetkych pole2D[X] rovnake retazce?
for (x = 0; x < i; i++)
{
printf("%s", pole2D[x]);
}
Zdravim vsetkych!
Chcel by som vas poprosit o pomoc s tymto problemom:
majme 2 rozmerne dynamicke pole definovane povedzme takto:
char **pole2D = NULL;
potom:
for (x = 0; x < i; x++){
fgets(priezvisko_meno, 51, *f);
pole2D[x] = (char*) malloc(strlen(priezvisko_meno) * sizeof(char));
pole2D[x] = priezvisko_meno;
fgets(ulica, 51, *f);
fgets(domova_dan, 10, *f);
fgets(odvoz_odpadu, 8, *f);
fgets(datum, 10, *f);
fgets(prazdny_riadok, 3, *f);
}
Preco, ked si necham vypisat pole2D[x] v ramci cyklu je tam spravny retazec, ale po skonceni cyklu su na vsetkych X rovnake retazce?
for (x = 0; x < i; i++)
{
printf("%s", pole2D[i]);
}
povedzme ze mam subor s 10 menami(i = 10). nacitam ich, alokujem pre ne pamat, ale vypise sa mi len 10x posledne meno...
Vdaka za rady a vysvetlenie