Avatar billede bumle90 Nybegynder
13. februar 2004 - 15:34 Der er 16 kommentarer og
1 løsning

Baggrundsproces med laveste prioritet

Hej, jeg ville høre om nogle evt. kunne hjælpe mig med hvordan jeg sætter mit c++ program til at køre som baggrundsproces med lav prioritet...Evt. et lille kodeeksempel :)
Avatar billede arne_v Ekspert
13. februar 2004 - 15:58 #1
Avatar billede bumle90 Nybegynder
13. februar 2004 - 16:03 #2
ja, har siddet og kigget lidt på den, men kan ikke rigtig få den til at funge....
Avatar billede bumle90 Nybegynder
13. februar 2004 - 16:05 #3
Der er en ting jeg og tænkte over også.
Creatprocess, den starter jo en anden exe fil ik sandt?
Jeg vil gerne bare have at man kører en exe fil og at den så selv kører i baggrunden med lav prioritet. Det er vel en smule lissom fork(); fungerer i et unix system tror jeg....Altså bare så jeg slipper for at lave 2 exe filer
Avatar billede arne_v Ekspert
13. februar 2004 - 16:09 #4
En console app som bringer sig selv i baggrunden frigør sig fra console vinduet ?

Eller en windows app uden window ?
Avatar billede bumle90 Nybegynder
13. februar 2004 - 16:10 #5
Det er en console app der frigør sig fra consol vinduet, så brugeren ikke kan se den. Og kører med lav prioritet
Avatar billede bumle90 Nybegynder
13. februar 2004 - 16:28 #6
er du der arne?
Avatar billede arne_v Ekspert
13. februar 2004 - 16:30 #7
Ja - men jeg tænker over mulighederne. Det er nok en af de hårdere nødder at knække.
Avatar billede bumle90 Nybegynder
13. februar 2004 - 16:37 #8
Hmmm oki...Jeg tænkte på noget med at man kunne få procID frem. Gemme den et globalt sted, starte en process med sig selv som parameter(altså så den starter en ny instans af sig selv) Der kigges nu i den nye process på procID, hov dens egen procID var sørme forskellig fra den der stod i den globale variabel. Så skal den springe if sætningen over og udføre det som programmet egentlig skal kunne.
Kunne man ikke gøre det på den måde?
Så virker det en lille smule som fork()
Avatar billede bumle90 Nybegynder
13. februar 2004 - 17:02 #9
Hvad så hvis man gør følgende :
1. kør eksefil ved fx. 2xklik
2. exe fil starter ny process med en anden exefil som parameter.
3. Denne nye exefil skal så kører minimeret og med lav prioritet.
4. Processen der først skabte den 2. process venter ikke på at den anden bliver færdig, men terminerer derimod bare med det samme. Dermed får brugeren heller noget at se skulle man mene...Kan den ide evt. bruges tror du?
Avatar billede arne_v Ekspert
13. februar 2004 - 17:05 #10
Det burde CreateProcess kunne klare.
Avatar billede bumle90 Nybegynder
13. februar 2004 - 17:08 #11
Gider du hjælpe mig med et lille eksempel?
Avatar billede arne_v Ekspert
13. februar 2004 - 17:11 #12
Jeg prøver at bokse noget sammen.
Avatar billede arne_v Ekspert
13. februar 2004 - 17:24 #13
p1.c:

#include <windows.h>

int main()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
    CreateProcess( NULL, "p2.exe", NULL, NULL, FALSE,
                  CREATE_NO_WINDOW | DETACHED_PROCESS | IDLE_PRIORITY_CLASS,
                  NULL, NULL, &si, &pi );
    return 0;
}

p2.c:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *fp;
    char buf[1000];
    fp = fopen("p.dat", "wb");
    memset(buf,0x00,sizeof(buf));
    while(1)
    {
        fwrite(buf,sizeof(buf),1,fp);
    }
}
Avatar billede arne_v Ekspert
13. februar 2004 - 17:25 #14
p1 starter p2 og p2 går igang med at fylde hard disken op, så CTRL-ALT-DEL
og stop process !
Avatar billede bumle90 Nybegynder
13. februar 2004 - 18:04 #15
perfekt :)
Havde faktisk selv fået lavet en næsten magen til. Det eneste jeg manglede var DETACHED_PROCESS.
Tak for hjælpen som sædvanlig Arne....Pointene er dine hvis du lige tyrer et svar denne vej hehe
Avatar billede arne_v Ekspert
13. februar 2004 - 18:15 #16
svar
Avatar billede bertelbrander Novice
13. februar 2004 - 20:55 #17
Jeg lavede et lille konsol program der skjuler sig selv. Det forsøger også at sætte sin egen prioritet, jeg er dog ikke sikker på at den sidste del virker, task manageren siger at processen har normal prioritet:

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  char Title[1234];
  HWND WndHandle;
  GetConsoleTitle(Title, sizeof(Title));
  WndHandle = FindWindow(0, Title);

  if(!WndHandle)
  {
    printf("Did not find me!\n");
    return EXIT_FAILURE;
  }
  printf("Prepare to hide\n");
  if(!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_IDLE))
    printf("Failed to set priority: %d\n", GetLastError());
  Sleep(10000);
  ShowWindow(WndHandle, SW_HIDE);
  printf("Now I'm gone\n");
  Sleep(10000);
  ShowWindow(WndHandle, SW_SHOW);
  printf("I'm back\n");
  Sleep(10000);

  return EXIT_SUCCESS;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester