Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
1

Получение доступа к переменной из потока и вывод в диалог

27.06.2015, 09:29. Показов 885. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создал потоковую функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
#include "stdafx.h"
 
#include "function.h"
 
bool bThreadstop=false;
int data=0;
 
//Потоковая функция обычная вне класса
UINT ThreadProc(LPVOID param)  //Создание потоковой функции 
{
    ::MessageBox((HWND)param, L"Thread activated",L"Message from thread",MB_OK);
    while(!bThreadstop)
    {
        data++;
         //Выполнение опреаций
        Sleep(4000);
        AfxMessageBox(L"hellow world");
    }
 
    ::MessageBox((HWND)param, L"Thread ended",L"Message from thread",MB_OK);
    return 0;
}
Запускаю ее в обработчике кнопки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Ctest_timerDlg::OnBnClickedButton3()
{
    bThreadstop=false;
    //создаем поток
    AfxBeginThread(ThreadProc,GetSafeHwnd()); //Запуск потока
/*
    while(true)
    {
        Sleep(5000);
        UpdateData(true);//получаем данные
        stringstream stream;
        stream <<data;
        m_output=stream.str().c_str();
        UpdateData(false);//возвращаем данные в диалог
    }*/
}
Мне нужно получить доступ к переменной data которую меняет поток и выводить в ее в диалоговом окне, как мне это сделать? Код что закомментирован ложит программу, как делать хз.

Добавлено через 1 минуту
Да можно запустить таймер и по таймеру обновлять диалог, но кто то ж писал что это можно делать без использования таймера.

Добавлено через 1 час 14 минут
Короче я понял, из потока мы посылаем свое собственное сообщение и тогда обновляем диалог и норм все. Мб. еще есть какие варианты? Я хочу все разобрать!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2015, 09:29
Ответы с готовыми решениями:

Вывод из потока в диалог
Здравствуйте! Помогите пожалуйсто с выводом из потока в диалог текста. А конкретнее есть...

Получение доступа к форме из другого потока
Здравствуйте! Мне нужно по нажатию мышкой на форме в месте клика отрисовать ProgressBar, который...

Получение доступа к функциям диалога из другого потока (mfc)
Всем доброго дня Возникла такая проблема. В классе диалогового окна создаем экземпляр класса для...

Получение значения переменной из основного потока
Здравствуйте. Столкнулся с элементарной проблемой: Есть переменная bool, она создана в основном...

1
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
28.06.2015, 09:49 2
Еще можно использовать объекты синхронизации. Создал например CreateEvent. В потоке после изменения данных сигнализируешь SetEvent, а обработчике диалога ждешь WaitForSingleObject.
Но для этого надо запускать еще один отдельный поток, что бы ожиданием не блокировать обработку остальных оконных сообщений. Поэтому с SendMessage удобнее.
0
28.06.2015, 09:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2015, 09:49
Помогаю со студенческими работами здесь

Завершить работу слота (закрыть диалог) потока, если извне для него была вызвана exit()
Привет! С Qt работал мало и очень давно, поэтому задаю такие вопросы. Смотрите - в самом...

Немодальный диалог, передача переменной главному диалогу
вобщем столкнулся с такой проблемкой: по нажатию на кнопке открываю не модальный диалог...

Получение данных с потока
Подскажите пожалуйста как получать и обрабатывать данные с потока. Есть API, в котором создается...

Получение состояния потока
Реализую программу, в которой: • создаются два новых потоки; • каждый поток выводит в цикле целую...

Получение значений из потока
Запускаю поток, в котором пытаюсь получить значение текущего статуса выполнения. Явно я что-то...

Ошибка доступа к Button из потока
есть главный поток и 1 дополнительный. private void checkForSettings() { ...


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

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