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

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

Восстановить пароль Регистрация
 
help.me
 Аватар для help.me
1 / 1 / 0
Регистрация: 20.05.2012
Сообщений: 16
09.06.2012, 17:08     Добавить комментарии #1
Помогите...
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 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
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
09.06.2012, 23:43     Добавить комментарии #4
rofl113, там еще есть kbhit ...)
Yandex
Объявления
09.06.2012, 23:43     Добавить комментарии
Ответ Создать тему
Опции темы

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