[C] Stworzenie procesu/watku, ktory dziala niezaleznie

0

Czesc ;) to znowu ja,
Mam dylemat, program (server) nasluchuje w nieskonczonosc. Wszystko jest ok, ale gdy chce odpalic funkcje w tym programie, ktora rowniez nasluchuje w nieskonczonosc, to nasluchiwanie tej pierwszej juz "niedziala" i tylko ta nowo uruchomiona funkcja nasluchuje.

Mam nadzieje ze da sie zrozumiec. Wiec jak sobie z tym poradzic? Pomyslalem Od razu o watkach/procesach, stworzyc nowy, dla tej funkcji, zeby dzialala niezaleznie od nasluchiwania serwera.

fork() odpada bo programuje w dev-cpp pod Win, wiec przyjrzalem sie funkcjom CreateProcess i CreateThread.

Nierozumiem bledu ktory wyskakuje, taki programik na probe zeby stworzyc drugi niezalezny proces/watek.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
BOOL CreateProcess(
    LPCTSTR               lpApplicationName,      // name of executable module
    LPTSTR                lpCommandLine,          // command line string
    LPSECURITY_ATTRIBUTES lpProcessAttributes,    // SD
    LPSECURITY_ATTRIBUTES lpThreadAttributes,     // SD
    BOOL                  fInheritHandles,        // handle inheritance option
    DWORD                 dwCreationFlags,        // creation flags
    LPVOID                lpEnvironment,          // new envirnment block
    LPCTSTR               lpCurrentDirectory,     // current directory name
    LPSTARTUPINFO         lpStartupInfo,          // startup information
    LPPROCESS_INFORMATION lpProcessInformation    // process information
);


STARTUPINFO          si = { sizeof(si) };
PROCESS_INFORMATION  pi;
char                 szExe[] = "cmd.exe";


int main(int argc, char *argv[])
{
  if(CreateProcess(0, szExe, 0, 0, FALSE, 0, 0, 0, &si, &pi))
{
   // optionally wait for process to finish
   WaitForSingleObject(pi.hProcess, INFINITE);

   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
}
  system("PAUSE");	
  return 0;
}

I jaki wynik egzekucji programu? ;]

16 G:\Dev-Cpp\proces.c conflicting types for 'CreateProcessA'
1173 g:\Dev-Cpp\include\winbase.h previous declaration of 'CreateProcessA' was here

16 G:\Dev-Cpp\proces.c conflicting types for 'CreateProcessA'
1173 g:\Dev-Cpp\include\winbase.h previous declaration of 'CreateProcessA' was here

G:\Dev-Cpp\Makefile.win [Build Error] [proces.o] Error 1

Rady, kody, mile widziane :).

0

kompilacji, kompilacji a nie egzekucji. poza tym w jezyku polskim egzekucja to wykonanie wyroku i sie nijak ma do angielskiego execute. po polsku mamy wlasnie owo slowo "wykonanie" ktore jest dobrym tlumaczeniem 'execute'.

a teraz do rzeczy: najpierw moze zorientuj sie jaka jest roznica miedzy watkiem a procesem, bo jest kolosalna. a kompilator Ci mowie ze masz:

  • wielokrotnie zdefiniowana funkcje CreateProcess. po kiego grzyba dawales jej sygnature? juz ona siedzi w naglowkach
  • ale sygnatura sama w sobie to nic zlego, tylko strata miejsca. tak na prawde blad tkwi w tym ze .. sie najwyrazniej walnales w swojej sygnaturze i rozni sie ona od tej ktora jest w naglowku i jest blad ktory nie pozwala na uznanie drugiej postaci funkcji. jakbybyly dokladnie takie same to ok.

czyli najproscie rozwiazac problem wywalajac niepotrzebna sygnature

// i tu sie misiu mylisz, słowo 'egzekucja' było uzyte prawidłowo, odsyłam do sjp, wlaściwie, to nawet z sjp mozna dyskutować ponieważ 'egzekucja' znaczy dokladnie 'wykonanie' w szczególności wyroku, tyle że jęz. polski jest językiem żywym, i jak w każdym języku istnieją tendencje do przenoszenia znaczenia pelnego stałego związku frazeologicznego na jedną z fraz go tworzących. [mf]

edit: bladzic jest rzecza ludzka, jednak jak juz tych ladnych pare lat zyje na swiecie, nie slyszalem zeby ktokolwiek uzywal tego slowa w innej frazie ;)

0

heh no i prosze dziala :)

buziaki

1 użytkowników online, w tym zalogowanych: 0, gości: 1