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

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

07.05.2014, 15:13. Показов 2237. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2014, 15:13
Ответы с готовыми решениями:

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

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

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

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

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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2014, 15:54
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru