Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
help.me
1 / 1 / 0
Регистрация: 20.05.2012
Сообщений: 16
#1

Добавить комментарии - C++

09.06.2012, 17:08. Просмотров 339. Ответов 3
Метки нет (Все метки)

Помогите...
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Semaphore.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "Semaphore.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
 
CWinApp theApp;
 
using namespace std;
 
static DWORD WINAPI FirstThread(void *pv);
static DWORD WINAPI SecondThread(void *pv);
 
HANDLE g_hSemaphore;
HANDLE hStdout; 
int Lid=0, g_nIndex=0;
int a[20], IndexResours=0;
LONG MaxCount = 2;
 
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO: change error code to suit your needs
        cerr << _T("Fatal Error: MFC initialization failed") << endl;
        nRetCode = 1;
    }
    else
    {
        // TODO: code your application's behavior here.
        DWORD dw;
        LONG g_iCount = 0;
            
        HANDLE hThreads[2];
        g_hSemaphore = ::CreateSemaphore(NULL, g_iCount, MaxCount, NULL);
        hThreads[0] = ::CreateThread(NULL, 0, FirstThread, NULL, 0 , &dw);
        hThreads[1] = ::CreateThread(NULL, 0, SecondThread, NULL, 0 , &dw);
        ::ResumeThread(hThreads[0]);
        ::ResumeThread(hThreads[1]);
        ::WaitForMultipleObjects(2, hThreads, TRUE, INFINITE);
        ::CloseHandle(hThreads[0]);
        ::CloseHandle(hThreads[1]);
        ::CloseHandle(g_hSemaphore);
        switch (Lid)
        {
            case 1 : cout << "\n nepBbIu' noTok *I*uHuLLIupoBaJI nepBbIM!!!\n"; break;
            case 2 : cout << "\n BTopou' noTok *I*uHuLLIupoBaJI nepBbIM!!!\n"; break;
            default : break;
        }
 
    }
    cout << endl << "The END!!!" << endl << "Press Any Key...";
    getch();
    return nRetCode;
}
 
static DWORD WINAPI FirstThread(void *pv)
{
    COORD pos;
    pos.X=3;
    BOOL fDone=FALSE;
    while (!fDone)
    {
        ::WaitForSingleObject(&g_hSemaphore, INFINITE);
        if(g_nIndex>=MaxCount)
            fDone=TRUE;
        else
        {
            g_nIndex++;
            for (int i=0; i<10; i++)
            {
            srand(time(NULL));
            IndexResours++;
            a[IndexResours-1]= rand()%1000;
            pos.Y = i;
            SetConsoleCursorPosition (hStdout ,pos);
            printf("%d", a[IndexResours-1]);
            Sleep(a[IndexResours-1]);   
            }
        }
        ::ReleaseSemaphore(g_hSemaphore,1,0);
    }
    if (!Lid)
        Lid = 1;
    return 0;
}
 
static DWORD WINAPI SecondThread(void *pv)
{
    COORD pos;
    pos.X=25;
    BOOL fDone=FALSE;
    while (!fDone)
    {
        ::WaitForSingleObject(&g_hSemaphore, INFINITE);
        if(g_nIndex>=MaxCount)
            fDone=TRUE;
        else
        {
            g_nIndex++;
            for (int i=0; i<10; i++)
            {
                IndexResours++;
                a[IndexResours-1]= rand()%1000;
                pos.Y = i;
                SetConsoleCursorPosition (hStdout ,pos);
                printf("%d", a[IndexResours-1]);
                Sleep(a[IndexResours-1]);   
            }
        }
        ::ReleaseSemaphore(g_hSemaphore,1,0);
    }
    if (!Lid)
        Lid = 2;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2012, 17:08     Добавить комментарии
Посмотрите здесь:

Комментарии C++
C++ Комментарии
C++ Комментарии
C++ Комментарии
C++ Комментарии
Комментарии C++
Комментарии к функциям добавить необходимо C++
Комментарии C++
C++ Добавить комментарии к коду (список - стек)
C++ Добавить комментарии по тексту программы и выполнить изменения в коде
C++ Объяснить решение задачи (добавить комментарии в код)
Изъять комментарии и добавить вместо них символ "пробел" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
09.06.2012, 20:14     Добавить комментарии #2
давали бы мне лабы с многопоточностью в универе (
rofl113
10 / 10 / 1
Регистрация: 26.02.2012
Сообщений: 36
09.06.2012, 20:17     Добавить комментарии #3
А нам давали.)) О великий getch() - только ты спасаешь старушку conio.h

Кстати вот тебе один коммент .))

C++
1
#include <conio.h> // для getch()
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
09.06.2012, 23:43     Добавить комментарии #4
rofl113, там еще есть kbhit ...)
Yandex
Объявления
09.06.2012, 23:43     Добавить комментарии
Ответ Создать тему
Опции темы

Текущее время: 05:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru