Avatar billede gumbert Nybegynder
16. juni 2003 - 22:42 Der er 7 kommentarer og
1 løsning

Få et program til at gøre flere ting samtidig.

Hey eksperter.

  egentlig har jeg selv løsningen på dette problem men jeg synes den virker som noget der hurtigt kan udvikle sig til spagettikode.
  Mit problem er at jeg har brug for at et program der skal gøre 2 ting samtidig.
  Indtil videre har de programmmer jeg har lavet kun lavet en ting ad gangen men nu har jeg brug for at det skal kunne gøre 2 ting på en gang. Min eneste løsning er at lave de 2 ting i selvstændige -exe-filer og køre dem fra mit program men........ der må være en bedre metode...
Avatar billede arne_v Ekspert
16. juni 2003 - 22:46 #1
Multithreading (eller evt. forking hvis du er på Unix).
Avatar billede gumbert Nybegynder
16. juni 2003 - 23:05 #2
Jeg kan godt regne ud hvad Multithreading er men hvordan virker den og hvordan bruges det? Er ikke på unix men kun windows..............
Avatar billede arne_v Ekspert
16. juni 2003 - 23:10 #3
Det er et stort emne.

Der er en online tutorial på http://blacksun.box.sk/tutorials.php/id/150
Avatar billede arne_v Ekspert
16. juni 2003 - 23:10 #4
Der er et kapitel om det i Petzold.
Avatar billede bertelbrander Novice
16. juni 2003 - 23:50 #5
Et meget simpelt multithread program der kører i windows (console mode). Burde kunne kompilere på de fleste windows-compilere (cygwin-gcc, BorlandC, MS Visual C++).

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

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
  int i = 0;
  DWORD MainThread = (DWORD )lpParameter;
  MSG msg;
  printf("Thread Started\n");
  do
  {
    GetMessage(&msg, NULL, 0, 0xFFFF);
    printf("Received: %d\n", msg.message);
    PostThreadMessage(MainThread, 1001, 0, 0);
  }
  while(i++ < 10);
  PostThreadMessage (MainThread, 1002, 0, 0);
  return 0;
}

int main(void)
{
  DWORD SlaveThreadId;
  DWORD MainThreadId = GetCurrentThreadId();
  MSG msg;

  CreateThread(NULL, 0, ThreadProc, (LPVOID )MainThreadId, 0,  &SlaveThreadId);

  if(!MainThreadId || !SlaveThreadId)
  {
    printf("Thread error!\n");
    return 0;
  }
  Sleep(10); /* Let the slave thread have a chance to run */
  do
  {
    PostThreadMessage(SlaveThreadId, 1000, 0, 0);
    GetMessage(&msg, NULL, 0, 0xFFFF);
    printf("Received: %d\n", msg.message);
  }
  while(msg.message != 1002);

  return 0;
}
</code>
Avatar billede arne_v Ekspert
11. juli 2003 - 19:03 #6
gumbert>

Tid at lukke spørgsmålet ?
Avatar billede arne_v Ekspert
22. juli 2003 - 22:44 #7
??
Avatar billede gumbert Nybegynder
28. august 2003 - 22:40 #8
undskyld jeg har et par af dem liggende
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