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

Потоки или коллбэки? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Разобрать блок приведенного кода http://www.cyberforum.ru/cpp-beginners/thread1246514.html
Есть код: Game::Game() : mWindow(sf::VideoMode(640, 480), "SFML Application", sf::Style::Close) , mTexture() , mPlayer() , mFont() , mStatisticsText() , mStatisticsUpdateTime() , mStatisticsNumFrames(0)
C++ Выделение статической памяти, не используя статические объекты Здравствуйте! Как известно, когда мы объявляем статическую переменную, то компилятор выделяет ей место с самого начала, т. е. располагает в статической памяти, оптимизируя расположение. Однако, я не могу использовать модификатор static в моем случае. Есть ли какие-либо способы прокрутить то же самое, но без использования static? http://www.cyberforum.ru/cpp-beginners/thread1246510.html
C++ Можно ли разширять матрицу без удаления предыдущей
Интересует вопрос, можно ли разширять матрицу без удаления предыдущей. Покажу сразу пример: Допустим есть некая структура, и так я её первоначально заполняю: var **v; v = new var*;//динамическая матрица for (int i = 0; i < CMY; i++) v = new var; И так CMY - это кол-во строк, а CMX - кол-во столбцов.
C++ Разработать три класса, которые следует связать между собой, используя наследование
Разработать три класса, которые следует связать между собой, используя наследование: класс Product, который имеет три элемент-данных - имя, цена и вес товара (базовый класс для всех классов); класс Buy, содержащий данные о количестве покупаемого товара в штуках, о цене за весь купленный товар и о весе товара (производный класс для класса Product и базовый класс для класса Check); класс...
C++ Запуск деструктора не осуществляется в приведенном коде http://www.cyberforum.ru/cpp-beginners/thread1246489.html
Добрый день. Написал программу, а в ней не хочет автоматически запускаться, хотя я вроде бы всё правильно делаю. Прошу подсказать, в чём может быть проблема. #include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; class Work { private:
C++ Где в памяти хранится тип указателя? Привет! Вы не подскажите, где в памяти храниться тип указателя? Ну допустим, у нас x86 и указатель занимает 4 байта, но эти 4-е байта - это ж просто адрес, а где хранится сам тип? Ведь есть же тип указателя, ну не всё же void*, есть же int*, bool*, double*, MyClass* и т.д. Я даже знаю, что есть информация о размере блока, на который указывает указатель как бы, он с каким - то смещением рядом... подробнее

Показать сообщение отдельно
_Ivana
2189 / 1394 / 124
Регистрация: 01.03.2013
Сообщений: 4,147
Записей в блоге: 2
25.08.2014, 01:49  [ТС]     Потоки или коллбэки?
Просветите еще пожалуйста в таком моменте - вот моя процедура запуска проигрывания семплов из памяти:
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
void Play_Proc(HWND hWnd)
{
    MMRESULT result;
    static HWAVEOUT hWaveOut;
    static WAVEHDR  WaveOutHdr;
 
    WAVEFORMATEX wfx;
    wfx.wFormatTag = WAVE_FORMAT_PCM;     //  simple, uncompressed format
    wfx.nChannels = 1;                    //  1=mono, 2=stereo
    wfx.nSamplesPerSec = sampleRate;      //  44100
    wfx.wBitsPerSample = 16;              //  16 for high quality, 8 for telephone-grade
    wfx.nBlockAlign = (wfx.wBitsPerSample >> 3) * wfx.nChannels;
    wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
    wfx.cbSize = 0;                       //  size of _extra_ info
 
    result = waveOutOpen(&hWaveOut, WAVE_MAPPER, &wfx, (DWORD_PTR) hwndGraphOut, 0L, CALLBACK_WINDOW);
    if (result) {
        //wchar_t fault[256];
        //waveOutGetErrorText(result, fault, 256);
        MessageBoxW(NULL, L"Ошибка открытия выходного потока", L"Error", MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL);
        return;
    }
    WaveOutHdr.lpData = (LPSTR)waveOut.buf;
    WaveOutHdr.dwBufferLength = NUMPTS*2;
    WaveOutHdr.dwBytesRecorded = 0;
    WaveOutHdr.dwUser = 0L;
    WaveOutHdr.dwFlags = 0L;
    WaveOutHdr.dwLoops = 0L;
    waveOutPrepareHeader(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR));
    result = waveOutWrite(hWaveOut, &WaveOutHdr, sizeof(WAVEHDR));
    if (result) {
        MessageBoxW(NULL, L"Ошибка выдачи в выходной поток", L"Error", MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL);
        return;
    }
}
, вот как я освобождаю ресурсы по окончании проигрывания:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LRESULT CALLBACK GraphWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch(msg)
    {
    case MM_WIM_DATA:
        waveInUnprepareHeader((HWAVEIN) wParam, (LPWAVEHDR) lParam, sizeof(WAVEHDR));
        waveInClose((HWAVEIN) wParam);
        SetWindowTextW(hwndSta1, L"MM_WIM_DATA");
        InvalidateRgn(hwndGraphIn, NULL, TRUE);
        SendMessage(hwndGraphIn, WM_PAINT, 0, 0);
        break;
    case MM_WOM_DONE:
        waveOutUnprepareHeader((HWAVEOUT) wParam, (LPWAVEHDR) lParam, sizeof(WAVEHDR)); 
        waveOutClose((HWAVEOUT) wParam);
        SetWindowTextW(hwndSta1, L"MM_WOM_DONE");
        break;
..................
Я сделал переменные
C++
1
2
    static HWAVEOUT hWaveOut;
    static WAVEHDR  WaveOutHdr;
статическими, иначе при выполнении возникала ошибка. Просто не хотелось делать их глобальными, хотя мне нужно обращение к ним в процедуре окна при освобождении ресурсов, но там я получаю их в качестве параметров оконной процедуры. Скажите, это нормальное решение? Или статические это те же глобальные и не надо так делать?
 
Текущее время: 20:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru