Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.04.2017
Сообщений: 1

Синхронизация потоков winapi

12.04.2017, 00:58. Показов 2973. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех. Есть 10 потоков, каждый поток выводится при клике левой кнопкой мыши в окно. В данный момент они выводятся друг после друга. Нужно сделать так, чтобы потоки синхронизировались и выводились сразу после клика мышкой, а не ждали окончания предыдущего. Полагаю, функцию WaitForSingleObject нужно заменить на мьютекс но ввиду незнания языка реализовать это не могу. Буду очень благодарен за помощь. Код прилагаю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <windows.h>
 
#define THREADS_NUMBER 10
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
DWORD WINAPI thread(LPVOID plv);
 
volatile int threadNumber = 0; // Номер потока
volatile HDC hdc;
volatile WORD xPos, yPos, nSize; // Координаты мыши
 
TCHAR szBuf[80];
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
    static TCHAR szAppName[] = TEXT("text");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;
 
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_ASTERISK);
    wndclass.hCursor = LoadCursor(NULL, IDC_CROSS);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
 
    RegisterClass(&wndclass);
 
    hwnd = CreateWindow(szAppName, TEXT("text"), WS_OVERLAPPED | WS_CAPTION | WS_THICKFRAME | WS_SYSMENU,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, nullptr, hInstance, nullptr);
 
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
 
    while (GetMessage(&msg, nullptr, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HANDLE hThread[THREADS_NUMBER];
    DWORD IDThread;
    volatile int cnt = 0;
 
    switch (message)
    {
    case WM_LBUTTONDOWN:
    {
        xPos = LOWORD(lParam);
        yPos = HIWORD(lParam);  
        hdc = GetDC(hwnd);
        hThread[threadNumber] = CreateThread(NULL, 5, thread, NULL, 0, &IDThread); // Создание потока
        WaitForSingleObject(hThread[threadNumber], INFINITE); // Ожидание - УБРАТЬ
        ReleaseDC(hwnd, hdc);
        CloseHandle(hThread[threadNumber]);
        threadNumber++; // При втором клике следующий
        return 0;
    }
    case WM_RBUTTONDOWN: 
    {   
    }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
 
DWORD WINAPI thread(LPVOID lpv) {
    int i = 0;
    for (;;) {
        i++;
        TextOut(hdc, xPos, yPos, szBuf, wsprintf(szBuf, TEXT("Posl - %d / %d"), i, threadNumber));
        Sleep(100);
        if (i == 10) {
            ExitThread(0);
        }
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2017, 00:58
Ответы с готовыми решениями:

Синхронизация потоков WinAPI. Основы
Всем привет. Пример. class A { private: volatile LONG value = 0; public:

Синхронизация потоков средствами WinAPI
В MFC для синхронизации потоков есть 3 вида объектов: критические секции, мютексы, семафоры. Первые из них - самые простые, но этого, в...

Синхронизация параллельных потоков в WINAPI
В общем задали такую лабораторную работу. Создать два потока. Первый поток производит запись в массив случайных данных. Второй...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2017, 00:58
Помогаю со студенческими работами здесь

Синхронизация потоков
Здравствуйте. Подскажите пожалуйста. У меня есть три потока. Мне нужно чтобы они запускались последовательно (1 - 2 -3). Подскажите как это...

Синхронизация потоков
Добрый день. Помогите пожалуйста написать программу на С++ по синхронизации потоков. Задание такое: поток А формирует общий ресурс -...

Синхронизация потоков
в общем есть код: DWORD WINAPI IndexSystemFile::GetFileFromDrive(void *DriveName){ long hFile = 0; int fRes = 0; ...

Синхронизация потоков
Помогите синхронизировать два потока на Win32 Api. 1й выводит числовую последовательность, 2й - числа Фибоначчи. Выполняются по кругу. ...

Синхронизация потоков
Вот код: #include &quot;iostream&quot; #include &quot;windows.h&quot; using namespace std; char* hydrogenContainer; char* oxygenContainer; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru