Avatar billede ulrikhjul Nybegynder
20. november 2006 - 23:00 Der er 2 kommentarer

Threads og mailboxes.

Hej.
Er der nogen der gider at give mig et meget simpelt eksempel på brug af en mailbox der bruges af flere tråde?

Der må meget gerne være semaphorer med i eksemplet også.

Og kis (keep it simpel) :-) Det lærer jeg det vist bedst ved.

VH Ulrik
Avatar billede bertelbrander Novice
20. november 2006 - 23:16 #1
Meget simpelt til windows:
http://damb.dk/snip/thread.html

Der er dog ingen semaphorer, men det kan laves.
Avatar billede bertelbrander Novice
20. november 2006 - 23:26 #2
Og stort set det samme, med semaphor:

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

HANDLE Semaphore = CreateSemaphore(0, 0, 1, "MyTestSemaphore");

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
  int i = 0;
  DWORD MainThread = (DWORD )lpParameter;
  MSG msg;
  printf("Slave Thread Started\n");
  ReleaseSemaphore(Semaphore, 1, 0);
  do
  {
    PostThreadMessage(MainThread, 1001, 0, 0);
    GetMessage(&msg, NULL, 0, 0xFFFF);
    printf("Slave Received: %d\n", msg.message);
  }
  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;
  }
  // Wait for the thread to release the semaphore
  WaitForSingleObject(Semaphore, INFINITE);
  do
  {
    GetMessage(&msg, NULL, 0, 0xFFFF);
    printf("Master Received: %d\n", msg.message);
    PostThreadMessage(SlaveThreadId, 1000, 0, 0);
  }
  while(msg.message != 1002);

  return 0;
}
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