[C++] signalling tussen 2 threads

Pagina: 1
Acties:

  • simenon
  • Registratie: Januari 2001
  • Laatst online: 03-02-2023
ik heb 2 threads die natuurlijk gelijktijdig lopen. Nu moet ik iets maken dat de eerste thread de tweede thread een signaal of event geeft nadat de eerste thread geinitialiseerd is. Maar het grote probleem is dat ik niet weet hoe of waarmee. Zijn daar events voor in C Builder :?

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

mutex

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

De Win32 API heeft daar verschillende opties voor. Voor wat jij wilt kun je idd het beste een event gebruiken. Error checking kun je er zelf wel bij verzinnen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
HANDLE hMyThread;
DWORD nMyThreadId;
HANDLE hMyEvent;

void CreateMyThread()
{
    hMyEvent = CreateEvent(NULL, true, false, NULL);

    hMyThread = CreateThread(NULL, 0, MyThread, (void*)0, 0, &nMyThreadID);

    // Wait until the other thread is ready
    WaitForSingleObject(hMyEvent, 10000);
}


code:
1
2
3
4
5
6
7
8
9
10
11
DWORD WINAPI MyThread(LPVOID hMyThread)
{
    // Initialisation

    // Wake main thread
    SetEvent(hMyEvent);

    // Whatever

    return 0;
}

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op woensdag 19 december 2001 10:07 schreef simenon het volgende:
ik heb 2 threads die natuurlijk gelijktijdig lopen. Nu moet ik iets maken dat de eerste thread de tweede thread een signaal of event geeft nadat de eerste thread geinitialiseerd is. Maar het grote probleem is dat ik niet weet hoe of waarmee. Zijn daar events voor in C Builder :?
Wat voor signaal, wat moet de tweede thread daarna wel/niet doen ?
Als de tweede thread moet wachten - mutex claimen in thread 1 voordat thread2 start, thread2 mutex laten claimen en mutex vrijgeven vanuit thread1.
Als de tweede thread moet stoppen met periodieke activiteit - In de loop mutex claimen (met timeout) & vrijgeven. Vanuit thread 1 mutex claimen. Op timeout in thread2 beslissen wat je nu wil.
Etc.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • simenon
  • Registratie: Januari 2001
  • Laatst online: 03-02-2023
Op woensdag 19 december 2001 22:27 schreef MSalters het volgende:

[..]

Wat voor signaal, wat moet de tweede thread daarna wel/niet doen ?
Als de tweede thread moet wachten - mutex claimen in thread 1 voordat thread2 start, thread2 mutex laten claimen en mutex vrijgeven vanuit thread1.
Als de tweede thread moet stoppen met periodieke activiteit - In de loop mutex claimen (met timeout) & vrijgeven. Vanuit thread 1 mutex claimen. Op timeout in thread2 beslissen wat je nu wil.
Etc.
thread 1 en thread 2 starten tegelijk met lopen. Op een gegeven moment heeft thread 2 informatie nodig is die gedefinieerd wordt in thread 1. Thread 2 moet dus even wachten totdat thread 1 die informatie heeft gedefinieerd voordat deze verder kan. Als dat gebeurt is kunnen beide threads verder lopen.

Het is in ieder geval opgelost door gebruik te maken van events.