Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 1
Регистрация: 21.04.2013
Сообщений: 205
1

Правильное использование семафоров

07.05.2014, 15:13. Показов 2263. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, использую семафоры для записи чтения двумя потоками в кольцевой буффер.


схематично, это происходит так:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
threadA obj1;
threadB obj2;
 
int main()
{
MainWindow w;
w.show;
 
obj1.start();
obj2.start();
}
 
void MainWindow::closeEvent (QCloseEvent *event)
{
obj1.flag1 =0;
obj2.flag2 =0;
 
obj1.terminate();
obj2.terminate();
 
event->accept();
}
thread.cpp
C++ (Qt)
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
QSemaphore A(buferSize);
QSemaphore B(0);
 
void threadA::run()
{
     while (flag1)
       {
             A.acquire();
 
            //запись в буффер
 
              B.release();
        }
}
 
void threadB::run()
{
     while (flag2)
       {
            qDebug()<<"point!!!";
 
             B.acquire();
 
            //чтение из буффера
 
              A.release();
        }
}
считывает и записывает в буффер нормально, но при закрытии окна все зависает и виртуалка вылетает. Последним распечатывается point.
Почему это происходит?

Добавлено через 26 минут
я предполагаю, что поток В при закрытии окна, уходит в бесконечный цикл,
и все зависает еще до flag2 = 0
0
07.05.2014, 15:13
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2014, 15:13
Ответы с готовыми решениями:

Правильное использование указателя
В программе пишутся данные с UDP, программа намного больше описанного здесь, просто меня интересует только конкретно задаваемый мной...

QLocalSocket: правильное использование сигнала error()
В документации про использование сигнала error(QLocalSocket::LocalSocketError socketError) написано так: Поясните, пожалуйста, как...

Утечка памяти, правильное использование new/delete
Здравствуйте. Написал программку, где работаю с передачей контейнера QList методом сигналов и слотов. Теперь ищу где накосячил с утечкой...

2
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
07.05.2014, 15:38 2
mhg, кто учил использовать terminate?
0
2 / 2 / 1
Регистрация: 21.04.2013
Сообщений: 205
07.05.2014, 15:54  [ТС] 3
"жасмин бланшет марк саммерфилд qt 4 программирование gui на c++" похожий пример

Добавлено через 12 минут
хотя нет, вру
там так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
void MainWindow::closeEvent (QCloseEvent *event)
{
obj1.flag1 =0;
obj2.flag2 =0;
 
obj1.wait();
obj2.wait();
event->accept();
}
но у меня так при клике на крестик окна все зависает
0
07.05.2014, 15:54
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2014, 15:54
Помогаю со студенческими работами здесь

Использование семафоров и мьютексов
Итак повторный запуск приложения). Уважаемые я конечно понимая что этот вопрос на ряду с &quot;иконкой возле часиков&quot; порядком всех...

Использование процессов, каналов, событий и семафоров для реализации клиент-серверного приложения
Парни, прошу вашей помощи. Нужно получить зачет, осталась 1 лабораторная работа, которую я даже малейше не представляю как ее сделать. Тема...

Правильное использование переменных
Всем Ку) Читаю муны и почти везде юзают,на мой взгляд лишние переменные. Например Ts:tstringlist; S:string; ... // Зачем ...

Функции и их правильное использование
Подскажите пытаюсь вычислить логическую функцию IF и END Задача передо мной стоит следующая: В таблице в каждую ячейку куда нужно...

Правильное использование Stream
Насколько я понимаю правильные вариант примерно такой using ( MemoryStream ms = GetStream()) { using (var fileStream = new...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Создаем SPA Router на чистом JavaScript
bytestream 17.02.2025
В современной веб-разработке одностраничные приложения (SPA) стали стандартом для создания динамичных и отзывчивых пользовательских интерфейсов. Ключевым компонентом любого SPA является роутер -. . .
Машинное обучение на TypeScript и TensorFlow
bytestream 17.02.2025
Машинное обучение становится все более востребованным направлением в современной разработке программного обеспечения. Интеграция искусственного интеллекта в веб-приложения открывает новые возможности. . .
Манипуляция данными EXIF и JPEG в JavaScript
bytestream 17.02.2025
В современном мире цифровой фотографии метаданные изображений играют важнейшую роль в организации и управлении медиаконтентом. Формат EXIF (Exchangeable Image File Format) - это стандарт,. . .
Как создать GUID/UUID в JavaScript
bytestream 17.02.2025
GUID (Globally Unique Identifier) и UUID (Universally Unique Identifier) - это специальные форматы 128-битных идентификаторов, которые практически гарантируют уникальность значения во времени и. . .
Что такое мышление в упрощенном смысле (моё субъективное видение, для создания модели).
Hrethgir 17.02.2025
Разумеется упрощать смысл есть. Дело в том, что я пришёл к тому выводу, что даже если я создам свой процессор (конвейер), то первое для чего смогу его использовать в качестве демонстративного. . .
Как Node.js устроен изнутри
Wired 17.02.2025
Node. js коренным образом изменил подход к веб-разработке, позволив использовать JavaScript не только в браузере, но и на стороне сервера. Созданный в 2009 году Райаном Далем, Node. js представляет. . .
Как обновить Node.js в Windows
Wired 17.02.2025
Думаю, многие разработчики сталкивались с ситуацией, когда устаревшая версия Node. js становилась источником проблем - от несовместимости с новыми пакетами до уязвимостей в безопасности. Особенно это. . .
Как обновить Node.js в MacOS
Wired 17.02.2025
В Node. js существует несколько подходов к обновлению, каждый из которых имеет свои преимущества и особенности применения. Выбор конкретного метода зависит от ваших потребностей - будь то. . .
Как обновить Node.js в Linux
Wired 17.02.2025
Обновление Node. js может показаться сложной задачей, особенно если у вас несколько проектов с разными зависимостями. Однако существует несколько надежных способов обновления, подходящих для разных. . .
[golang] 134. Gas Station
alhaos 17.02.2025
Тут нам даны два целочисленных слайса gas и cost, индексы массива представляют собой заправочные станции. а элементы gas это количество топлива на такой станции, cost это количество топлива. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru