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

Mutex блокировка приватного поля класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ c++ и ассемблер http://www.cyberforum.ru/cpp-beginners/thread963891.html
есть процедура на ассемблер .model small .code _count proc push bp xor ebp, ebp mov bp, sp
C++ Сертификат x509 Подскажите, пожалуйста, по поводу сертификата x509. Я скачал сертификат, например, GTE CyberTrust Global Root, где в составе имеются поля: версия, серийный номер, алгоритм подписи, издатель, валидность, субъект, открытый ключ и расширения. Но когда я открываю этот файл в компиляторе (копирую данные в массив) и вручную пытаюсь распарсить -- сертификат обрывается на издателе. Вот, что мне... http://www.cyberforum.ru/cpp-beginners/thread963885.html
C++ try . catch
можно ли провести данную операцию для функции erase у вектора??? пытался, что-то не получилось: #include <vector> #include <algorithm> #include <exception> #include<iostream> using namespace std; void main() { vector<int> qw;
C++ Что означает тип Class A __cdecl(void) ?
День добрый! Помогите разобраться с одним кодом, уже несколько часов голову ломаю. #include <iostream> using namespace std; class A { int x; public: A() {x=5;} A(int a) {x=a;}
C++ блок схема http://www.cyberforum.ru/cpp-beginners/thread963870.html
помогите пожалусто нарисовать блок схему а то сложная програма никак немогу в*эхать вот код #include <iostream> using namespace std; unsigned long get_fib(int num); int main(void)
C++ Перевод десятичного числа в двоичное число Всем доброго времени суток! Собственно вот мой код, который должен переводисть число десятичное в число двоичное. Потестил я его, со значениями от 0 до 9 - всё работает, но когда я берусь за число 10, то вместо того, чтобы на выходе у меня было двоичное число 1010, у меня получается число 1110. Помогите. Вот код: #include <iostream> #include <vector> using namespace std; подробнее

Показать сообщение отдельно
Shaman163
4 / 4 / 0
Регистрация: 22.12.2011
Сообщений: 134
27.09.2013, 22:45  [ТС]     Mutex блокировка приватного поля класса
Реализовать фильтрацию изображения. Класс "A" это так называемый Bitmap содержащий массив пикселей, мне нужно заблокировать этот массив, затем вытащить массив указателей на пиксели методом GetPixels() ну а после разблокировать массив для дальнейших операций. Всё это должно осуществляться в отдельном потоке, из за чего собственно весь геморой с мьютексами.
Вот класс который работает криво. При объявлениии нового потока Мьютекс должен захватываться сразу же, а здесь он захватывается только после вызова Lock() в этом месте и происходит рассинхрон.
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
    class Bitmap
    {
        private:
            Pixel** pixels;
            Vector2 Size;
            mutex door;
 
        public:
            //= Конструкторы / Деструкторы ============================
            Bitmap();
            ~Bitmap();
            Bitmap(Vector2 size);
            Bitmap(Pixel** pixels);
            Bitmap(Byte* pixels, int bpp);
 
            //= Методы замены =========================================
            void SetPixel (const Vector2 position, const Pixel color);
            void SetPixels(Pixel** pixels);
            void SetBytes(Byte* Pixels, int bpp);
 
            //= Методы получения =======================================
            Pixel  GetPixel(Vector2 position);
            Pixel** GetPixels();
            Byte*   GetBytes(int bpp);
            Vector2 GetSize();
 
            //= Обработка Mutex ========================================
            bool closed = false;// флаг показывающий заблокированы ли ресурсы изображения
 
            void Lock()
            {
                closed = true;
                door.lock();
            }
            bool try_Lock()
            {
                return closed = door.try_lock();
            }
            void Unlock()
            {
                closed = false;
                door.unlock();
            }
 
    };
Ну и вот ещё объект нового потока:
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
        void Binary::Build(Bitmap* face, float treshold)
        {
            // дожидаемся освобождения ресурсов.
            while(!face->try_Lock());
            // как только они освобождаются блокируем и забираем их для просчёта
            Pixel** pixels = face->GetPixels();
            Vector2 Size = face->GetSize();
 
            for(int x = 0; x < Size.x; x++)
            {
                for(int y = 0; y < Size.y; y++)
                {
                    if(pixels[x][y].GetBrightness() <  treshold)
                    {
                        pixels[x][y] = Pixel(0,0,0);
                    }
                    else
                    {
                        pixels[x][y] = Pixel(255,255,255);
                    }
                }
            }
            face->Unlock();// разблокирование после просчёта.
        }
 
Текущее время: 04:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru