C++ procesi

poruka: 11
|
čitano: 2.959
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
C++ procesi
pitanje

Eto mene natrag ljudovi...poceo novi semestar...i novi problemi sa ovim cudovistem od

C-a ...prije  svega  puno  hvala  svima  koji  su  mi  odg  na  moju  zadnju  temu...I tako sad imam

2 predmeta koja se baziraju na C u...algoritmi i strukture podataka i Operacijski sustavi...

zasad nista tesko...ali imam problem sa jednom pripremom...

 

Kako je profesor koji drzi operacijske radi  na unixu...sve sto trebamo napraviti je objasnio za unix...

mene  sad  zanima  kako  da  isto  napravim  u  Windowsima...prica  je  vezana  uz  procese...

 

Nemrem  skuzit  naredbu  CreateProcess() ( fork je puno jednostavniji )...Zasad sam uspio

napravit  novi  proces  koji  pokrece  notepad...ali  mi  ne  pomaze  puno  kad  je  u  pitanju  ovakav  zadatak...

 

Napraviti program koji pokreće tri procesa. Definirajte varijablu A kao globalnu varijablu.

Svaki proces neka 100 puta dodaje broj 1 u varijablu A.

Ispisati vrijednost varijable A za svaki proces nakon obavljenog posla.

 

Jasno  mi  je  da  proces  ima  zasebnu  memoriju  i  da ce svaki  A  biti  100..ali  ja  nemrem  to  dobit  u  C-u...

trazi  me  milijon  i  jedan  parametar...

 

 
0 0 hvala 0
17 godina
neaktivan
offline
C++ procesi

Hmm jel' Cafuta u pitanju? :)

Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
C++ procesi
autorov komentar

jup :)

 
0 0 hvala 0
17 godina
protjeran
offline
RE: C++ procesi
LBS kaže...

Eto mene natrag ljudovi...poceo novi semestar...i novi problemi sa ovim cudovistem od

C-a ...prije  svega  puno  hvala  svima  koji  su  mi  odg  na  moju  zadnju  temu...I tako sad imam

2 predmeta koja se baziraju na C u...algoritmi i strukture podataka i Operacijski sustavi...

zasad nista tesko...ali imam problem sa jednom pripremom...

 

Kako je profesor koji drzi operacijske radi  na unixu...sve sto trebamo napraviti je objasnio za unix...

mene  sad  zanima  kako  da  isto  napravim  u  Windowsima...prica  je  vezana  uz  procese...

 

Nemrem  skuzit  naredbu  CreateProcess() ( fork je puno jednostavniji )...Zasad sam uspio

napravit  novi  proces  koji  pokrece  notepad...ali  mi  ne  pomaze  puno  kad  je  u  pitanju  ovakav  zadatak...

 

Napraviti program koji pokreće tri procesa. Definirajte varijablu A kao globalnu varijablu.

Svaki proces neka 100 puta dodaje broj 1 u varijablu A.

Ispisati vrijednost varijable A za svaki proces nakon obavljenog posla.

 

Jasno  mi  je  da  proces  ima  zasebnu  memoriju  i  da ce svaki  A  biti  100..ali  ja  nemrem  to  dobit  u  C-u...

trazi  me  milijon  i  jedan  parametar...

 

 Uh.. ovo je pravi TVZ topic :)

Uglavnom, koliko sam skužio, svaki taj proces ima svoju globalnu varijablu A? Tada unutar tog procesa kroz for petlju definiraš uvećanje za 1 i to je to. U svom programu koji poziva taj proces definiraš ovako:

STARTUPINFO startInfo;
PROCESS_INFORMATION processInfo;
char KomandnaLinija[255] = "MojProces.exe";

GetStartupInfo(&startInfo);
if(!CreateProcess(NULL, KomandnaLinija, NULL, NULL, FALSE, 0,
          NULL, NULL, &startInfo, &processInfo)){
    printf("Kreiranje procesa nije uspjelo!");
}
// ključna stvar
WaitForSingleObject(processInfo.hProcess, INFINITE);

Zapravo, poziv procesa ćeš ponoviti 3 puta, ali važno je navesti ovu zadnju naredbu, jer ona će prisiliti tvoj program da čeka izvršenje prethodno pokrenutog procesa tj. tek nakon što jedan od procesa bude gotov s uvećavanjem varijable A do 100 da se pokreće drugi, pa treći.

A možeš pogledati i ovdje za detaljniji primjer


17 godina
neaktivan
offline
C++ procesi
autorov komentar

E to je ono sto mene muci..ja sam uspio pokrenut notepad tim putem...ali fora u zadatku je da

taj  proces  ne  poziva  .exe  ili  .cpp...recimo  drugi  imaju  zadatak...

 

Napraviti program koji pokreće 10 procesa. Svaki proces ispisuje poruku

„ja sam pokrenut, proces moj_broj“. Moj_broj je broj procesa.

 

Sto  bi  znacilo  da  bi  moro  kreirat  10  .exe  filea  da  to  moze  radit...dok  je

prof  objasnjavao  on  je  to  sve izveo  iz  koda...nije  pozivao  niti  jedan  proces

preko  .exe...neg  je  jednostavno  mu  dao  osnovne  parametre  i  to  je  radilo...

(  ili  sam  ja  nesto  krivo  shvatio )

 
0 0 hvala 0
17 godina
protjeran
offline
RE: C++ procesi
LBS kaže...

E to je ono sto mene muci..ja sam uspio pokrenut notepad tim putem...ali fora u zadatku je da

taj  proces  ne  poziva  .exe  ili  .cpp...recimo  drugi  imaju  zadatak...

 

Napraviti program koji pokreće 10 procesa. Svaki proces ispisuje poruku

„ja sam pokrenut, proces moj_broj“. Moj_broj je broj procesa.

 

Sto  bi  znacilo  da  bi  moro  kreirat  10  .exe  filea  da  to  moze  radit...dok  je

prof  objasnjavao  on  je  to  sve izveo  iz  koda...nije  pozivao  niti  jedan  proces

preko  .exe...neg  je  jednostavno  mu  dao  osnovne  parametre  i  to  je  radilo...

(  ili  sam  ja  nesto  krivo  shvatio )

 
To je onda riječ o child procesima jer inače drukčije nije moguće. Npr.:

#include <stdio.h> /* printf, stderr, fprintf */
#include <unistd.h> /* _exit, fork */
#include <stdlib.h> /* exit */
#include <errno.h> /* errno */

int main(void)
{
pid_t pid = fork();

if (pid == 0)
{
/* Child process:
* When fork() returns 0, we are in
* the child process.
* Here we count up to ten, one each second.
*/
int j;
for (j = 0; j < 10; j++)
{
printf("child: %d\n", j);
sleep(1);
}
_exit(0); /* Note that we do not use exit() */
}
else if (pid > 0)
{
/* Parent process:
* When fork() returns a positive number, we are in the parent process
* (the fork return value is the PID of the newly-created child process).
* Again we count up to ten.
*/
int i;
for (i = 0; i < 10; i++)
{
printf("parent: %d\n", i);
sleep(1);
}
exit(0);
}
else
{
/* Error:
* When fork() returns a negative number, an error happened
* (for example, number of processes reached the limit).
*/
fprintf(stderr, "can't fork, error %d\n", errno);
exit(1);
}
}

Ovo je primjer s jednog site-a pošto sada nemam linux pa ni unistd.h da ti pokažem osobno. Uglavnom, stvar je takva da fork kreira novi child proces, i prilikom toga vraća 0 ukoliko to uspije. Tek tada definiraš što taj child proces radi. Imaš fino u primjeru objašnjeno:

pid_t pid = fork(); // kreiraj child proces

if (pid == 0)
{
// OVDJE DEFINIRAŠ ŠTO CHILD PROCES TREBA RADITI

int j;
for (j = 0; j < 10; j++) // BROJI DO 10!
{
printf("child: %d\n", j);
sleep(1);
}
_exit(0);
}

I evo, ti ovo sada možeš iskoristiti da broji do 100 :) Samo iznad još staviš for petlju da ti kreira 3 procesa i stvar rješena.


Poruka je uređivana zadnji put sub 8.11.2008 14:34 (Tracer).
17 godina
neaktivan
offline
C++ procesi
autorov komentar

Kuzim ga ja u unix/linuxu...fork ne koristi nikakve dodatneparametre...ali kako to u windowsima dobit ?

 
0 0 hvala 0
17 godina
protjeran
offline
RE: C++ procesi

Isto kao i u linuxu. Samo moraš kopirati unistd.h i sva ostala zaglavlja iz linuxa u svoje win okruženje. Iako, nisam baš probao, no pošto je riječ o C-u vjerujem da će uspjeti.

17 godina
neaktivan
offline
C++ procesi
autorov komentar

Ali kako ce to raditi ako je fork() samo za unix ? Kako da prekopiram to u windows a da radi ?

 

ja  mislim  da  je  on  govorio  da  to  rijesimo  sa  create  process....

 
0 0 hvala 0
17 godina
protjeran
offline
C++ procesi

Ti baš hoćeš da ti se sve na dlanu dade? Već sam ti rekao što treba kopirati pa probati, a ako je sa createprocess onda već gore imaš kako se proces takav kreira. I sad malo razmisli i biti će ti jasno kako da napraviš child proces. A ako ti i dalje nije jasno, pošalji mail profesoru pa njega pitaj.

Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
C++ procesi
autorov komentar

Uspio sam ga rijesit u Unixu...sve radi A u glavnom programu ostaje isti a u child procesima je 100...

ali  nisam  isto  uspio  u  windowsima...pokuso  sam  kopirajuci  unistd.h  i ostalih predprocesorskih naredbi ali

nista  nije  pomoglo...hvala  na  pomoci...

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice