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

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

Войти
Регистрация
Восстановить пароль
 
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
#1

Многопоточность в VC++ 2008 - C++

14.01.2012, 13:35. Просмотров 861. Ответов 4
Метки нет (Все метки)

Где можно найти нормальный пример? Все, что запускаю не работает, а значит читать обьяснения нет смысла.
Вот например при таком коде (из msdn):
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
// Potochnost.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>
 
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>
 
#define MAX_THREADS  32
 
// The function getrandom returns a random number between 
// min and max, which must be in integer range.
#define getrandom( min, max ) (SHORT)((rand() % (int)(((max) + 1) - \
                               (min))) + (min))
 
int main( void );                    // Thread 1: main 
void KbdFunc( void  );               // Keyboard input, thread dispatch
void BounceProc( void * MyID );      // Threads 2 to n: display 
void ClearScreen( void );            // Screen clear 
void ShutDown( void );               // Program shutdown 
void WriteTitle( int ThreadNum );    // Display title bar information 
 
HANDLE  hConsoleOut;                 // Handle to the console 
HANDLE  hRunMutex;                   // "Keep Running" mutex 
HANDLE  hScreenMutex;                // "Screen update" mutex
int     ThreadNr;                    // Number of threads started 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; // Console information 
 
 
int main() // Thread One 
{
    // Get display screen information & clear the screen.
    hConsoleOut = GetStdHandle( STD_OUTPUT_HANDLE );
    GetConsoleScreenBufferInfo( hConsoleOut, &csbiInfo );
    ClearScreen();
    WriteTitle( 0 );
 
    // Create the mutexes and reset thread count.
    hScreenMutex = CreateMutex( NULL, FALSE, NULL );  // Cleared 
    hRunMutex = CreateMutex( NULL, TRUE, NULL );      // Set 
    ThreadNr = 0;
 
    // Start waiting for keyboard input to dispatch threads or exit.
    KbdFunc();
 
    // All threads done. Clean up handles.
    CloseHandle( hScreenMutex );
    CloseHandle( hRunMutex );
    CloseHandle( hConsoleOut );
}
 
void ShutDown( void ) // Shut down threads 
{
    while ( ThreadNr > 0 )
    {
        // Tell thread to die and record its death.
        ReleaseMutex( hRunMutex );
        ThreadNr--;   
    }
    
    // Clean up display when done
    WaitForSingleObject( hScreenMutex, INFINITE );
    ClearScreen();
}
 
void KbdFunc( void ) // Dispatch and count threads.
{
    int         KeyInfo;
 
    do
    {
        KeyInfo = _getch();
        if ( tolower( KeyInfo ) == 'a' && 
             ThreadNr < MAX_THREADS )
        {
            ThreadNr++;
            _beginthread( BounceProc, 0, &ThreadNr );
            WriteTitle( ThreadNr );
        }
    } while( tolower( KeyInfo ) != 'q' );
 
    ShutDown();
}
 
void BounceProc( void *pMyID )
{
    char    MyCell, OldCell;
    WORD    MyAttrib, OldAttrib;
    char    BlankCell = 0x20;
    COORD   Coords, Delta;
    COORD   Old = {0,0};
    DWORD   Dummy;
    char    *MyID = (char*)pMyID;
 
    // Generate update increments and initial 
    // display coordinates.
    srand( (unsigned int) *MyID * 3 );
 
    Coords.X = getrandom( 0, csbiInfo.dwSize.X - 1 );
    Coords.Y = getrandom( 0, csbiInfo.dwSize.Y - 1 );
    Delta.X = getrandom( -3, 3 );
    Delta.Y = getrandom( -3, 3 );
 
    // Set up "happy face" & generate color 
    // attribute from thread number.
    if( *MyID > 16)
        MyCell = 0x01;          // outline face 
    else
        MyCell = 0x02;          // solid face 
    MyAttrib =  *MyID & 0x0F;   // force black background 
 
    do
    {
        // Wait for display to be available, then lock it.
        WaitForSingleObject( hScreenMutex, INFINITE );
 
        // If we still occupy the old screen position, blank it out. 
        ReadConsoleOutputCharacter( hConsoleOut, &OldCell, 1, 
                                    Old, &Dummy );
        ReadConsoleOutputAttribute( hConsoleOut, &OldAttrib, 1, 
                                    Old, &Dummy );
        if (( OldCell == MyCell ) && (OldAttrib == MyAttrib))
            WriteConsoleOutputCharacter( hConsoleOut, &BlankCell, 1,
                                         Old, &Dummy );
 
        // Draw new face, then clear screen lock 
        WriteConsoleOutputCharacter( hConsoleOut, &MyCell, 1, 
                                     Coords, &Dummy );
        WriteConsoleOutputAttribute( hConsoleOut, &MyAttrib, 1, 
                                     Coords, &Dummy );
        ReleaseMutex( hScreenMutex );
 
        // Increment the coordinates for next placement of the block. 
        Old.X = Coords.X;
        Old.Y = Coords.Y;
        Coords.X += Delta.X;
        Coords.Y += Delta.Y;
 
        // If we are about to go off the screen, reverse direction 
        if( Coords.X < 0 || Coords.X >= csbiInfo.dwSize.X )
        {
            Delta.X = -Delta.X;
            Beep( 400, 50 );
        }
        if( Coords.Y < 0 || Coords.Y > csbiInfo.dwSize.Y )
        {
            Delta.Y = -Delta.Y;
            Beep( 600, 50 );
        }
    }
    // Repeat while RunMutex is still taken. 
    while ( WaitForSingleObject( hRunMutex, 75L ) == WAIT_TIMEOUT );
}
 
void WriteTitle( int ThreadNum )
{
    enum { 
        sizeOfNThreadMsg = 80 
    };
    char    NThreadMsg[sizeOfNThreadMsg];
 
    sprintf_s( NThreadMsg, sizeOfNThreadMsg, 
               "Threads running: %02d.  Press 'A' "
               "to start a thread,'Q' to quit.", ThreadNum );
    SetConsoleTitle( NThreadMsg );
}
 
void ClearScreen( void )
{
    DWORD    dummy;
    COORD    Home = { 0, 0 };
    FillConsoleOutputCharacter( hConsoleOut, ' ', 
                                csbiInfo.dwSize.X * csbiInfo.dwSize.Y, 
                                Home, &dummy );
}
Выдает:
1>error C2664: ReadConsoleOutputCharacterW: невозможно преобразовать параметр 2 из 'char *' в 'LPWSTR'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>error C2664: WriteConsoleOutputCharacterW: невозможно преобразовать параметр 2 из 'char *' в 'LPCWSTR'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>error C2664: WriteConsoleOutputCharacterW: невозможно преобразовать параметр 2 из 'char *' в 'LPCWSTR'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>error C2664: SetConsoleTitleW: невозможно преобразовать параметр 1 из 'char [80]' в 'LPCWSTR'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2012, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Многопоточность в VC++ 2008 (C++):

Если проект создала в Visual C++ Express 2008, он должен запуститься просто в VS 2008? - C++
Извините за глупый вопрос, просто времени нет устанавливать и проверять( Очень спешу

Многопоточность - C++
Здравствуйте уважаемые форумчане! Суть проблемы такова, в нижней задаче есть две методы сортировки, и эти два метода надо чтобы выполнялись...

Многопоточность С++ - C++
Добрый вечер! написал вот такую программку. std::vector&lt;std::thread&gt; threads; std::recursive_mutex mutex; for (int i...

Многопоточность c++ - C++
Добрый день! Я только начинаю изучать многозадачность в c++ и у меня возник вопрос о том как возможно использовать один объект разными...

C++ 11 многопоточность - C++
Всем привет!!!Я пытаюсь сделать , подобие прогресс -бара, и столкнулся с проблемой при изучении материала по многопоточности, итак, я у...

Многопоточность в С++ - C++
Добрый день! Если я создам экземпляр класса в одном потоке и начну одновременно из нескольких других потоков обращаться тому...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
14.01.2012, 14:07 #2
бл* да АНАЛИЗИРУЙТЕ ВЫ ОШИБКИ!!!
ну НЕ ПРИЧЕМ тут многопоточность!!!
и 1 страница в гугле тебе ответ даст на ошибку.
http://yandex.ru/yandsearch?text=+%2...PCWSTR%27&lr=2
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
21.01.2012, 12:44  [ТС] #3
OstapBender, я пробовал что то изменить и не получалось.

Не по теме:

Вам нужно бы выпить валерьяночки


C++
1
ReadConsoleOutputCharacter( hConsoleOut, &OldCell, 1, Old, &Dummy );
1>error C2664: ReadConsoleOutputCharacterW: невозможно преобразовать параметр 2 из 'char *' в 'LPWSTR'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Подскажите, пожалуйста, правильный вариант...
-=ЮрА=-
Заблокирован
Автор FAQ
21.01.2012, 12:51 #4
Цитата Сообщение от AncinetHero Посмотреть сообщение
OstapBender, я пробовал что то изменить и не получалось.
- уже сколько раз встречаю почти беспомощность людей на такие предупреждения

Цитата Сообщение от AncinetHero Посмотреть сообщение
ReadConsoleOutputCharacterW
- ну понятноже что у функции 2 прототипа, один для char ReadConsoleOutputCharacterA другой для TCHAR ReadConsoleOutputCharacterW. Решение до боли примитивно - везде где видим предупреждение пишем А вконце функции, к примеру

Цитата Сообщение от AncinetHero Посмотреть сообщение
ReadConsoleOutputCharacter( hConsoleOut, &OldCell, 1,
* * * * * * * * * * * * * * * * * * Old, &Dummy );
- следует записать
ReadConsoleOutputCharacterА( hConsoleOut...
-=ЮрА=-
Заблокирован
Автор FAQ
21.01.2012, 12:58 #5
В 2008-й код вообще без исправлений откомпилировался, ниже скрин и проект в 9-ке
Миниатюры
Многопоточность в VC++ 2008  
Вложения
Тип файла: rar Potochnost_VS9.0.rar (5.6 Кб, 12 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 12:58
Привет! Вот еще темы с ответами:

Многопоточность - C++
Есть задание: Написать и протестировать функцию, которая находит в массиве минимальный по модулю элемент и заменяет им все элементы с...

C++ Многопоточность - C++
Как сделать так, чтобы эта программа заработала? А то она мне вот что пишет: g++ test.cpp -o test -lpthread ./test ...

Многопоточность - C++
Всем привет, заметил в одном проекте подобный код: struct Counter { int i; } #define g_counter ACE_Singleton&lt; Counter,...

C++ и Многопоточность. - C++
Всем привет. Написал код с использованием Curl для авторизации в вконтакте (могу скинуть код). Аккаунты для авторизации берутся из...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.01.2012, 12:58
Ответ Создать тему
Опции темы

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