Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <thread>
- #include <atomic>
- #define THREADCOUNT 4
- std::thread Threads[THREADCOUNT];
- HANDLE TestEvent;
- std::atomic<int> ThreadCounter = 0;
- void WaitForAllThreads()
- {
- if (ThreadCounter.fetch_add(1) == THREADCOUNT - 1)
- {
- ThreadCounter = 0;
- SetEvent(TestEvent);
- ResetEvent(TestEvent);
- }
- else
- WaitForSingleObject(TestEvent, INFINITE);
- }
- bool Run = true;
- void ThreadFunction()
- {
- while (Run)
- {
- printf("work 000\n");
- WaitForAllThreads();
- printf("work 111\n");
- WaitForAllThreads();
- }
- }
- int main()
- {
- TestEvent = CreateEvent(
- NULL, // default security attributes
- TRUE, // manual-reset event
- FALSE, // initial state is nonsignaled
- TEXT("TestEvent") // object name
- );
- for (int i = 0; i < THREADCOUNT; ++i)
- Threads[i] = std::thread(&ThreadFunction);
- getchar();
- bool Run = false;
- for (int i = 0; i < THREADCOUNT; ++i)
- Threads[i].join();
- getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement