Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
7 / 7 / 0
Регистрация: 28.09.2009
Сообщений: 52
1

Вывод информации из потока.

28.08.2010, 00:12. Показов 1682. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В программе используется 1 дополнительный поток, в котором работает цикл. Мне нужно, чтобы когда цикл увеличивает переменную на +1, это отобразилось в Label.

Основное окно.
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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
s1=StrToInt(Edit1->Text);
s2=StrToInt(Edit2->Text);
s=s2+5000;
Sleep(5000);
Label2->Caption=s1;
DWORD dwThreadId;
HANDLE hThread = CreateThread(0,0,Test,0,0,&dwThreadId);
}
Поток:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DWORD WINAPI Test(LPVOID lpParameter)
{
while(s1>0)
{
if(a!=0){
Sleep(s);
}
s1--;
a++;
keybd_event('C', 0,0,0);
keybd_event('C', 0,KEYEVENTF_KEYUP,0);
//Form1->Label1->Caption=a;      <- это не работает
q=s*s1;
w=q/60000;
//Form1->Label6->Caption=w;     <- это не работает
Application->ProcessMessages ();
}
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2010, 00:12
Ответы с готовыми решениями:

Вывод из потока
Здравствуйте. Помогите пожалуйста разобраться почему код не хочет работать. #include &lt;iostream.h&gt;...

Быстрый вывод данных из потока
Приветствую. Для максимально быстрого вывода данных из потока в окно я создал нижеприведенный...

Создание потока ostringstream и вывод в Memo
Почему то указывает ошибку на (oss &lt;&lt; p -&gt; val &lt;&lt; &quot;\n&quot;) с сообщением 'operator &lt;&lt;' not implemented...

Вывод информации из потока
Привет всем ! Есть поток public Socket socket = new Socket(AddressFamily.InterNetwork,...

6
70 / 70 / 4
Регистрация: 02.07.2010
Сообщений: 228
28.08.2010, 12:27 2
Странно, у меня при разбиении на потоки всё работало норм. А что пишет, что ты подразумеваешь под "не работает"?
P.S. может конечно я что-то не уловил, но зачем тут другой поток, может проще обойтись задержками через таймер, или ты пишешь именно распределённое по ядрам приложение?
0
7 / 7 / 0
Регистрация: 28.09.2009
Сообщений: 52
28.08.2010, 14:42  [ТС] 3
Я использую таймер Sleep();, Но он подвешивет программу на время своего выполнения ( а он выполнялся 99% времени ) Я решил вывезти его в отдельный поток, так что бы основное окно программы не зависало. Если есть предложения как заменить Sleep(); буду только рад.

С строками 12 и 15, приложение компилируется, но выдает ошибку уже при использовании:
Миниатюры
Вывод информации из потока.  
0
70 / 70 / 4
Регистрация: 02.07.2010
Сообщений: 228
28.08.2010, 16:05 4
sleep это не таймер а задержка, она вроде использует пустой цикл for вот и подвисает, возможно тебе требуется компонент TTimer, он срабатывает через указанное пользователем количество секунд и в обработчик срабатывания можно запихнуть нужный тебе код.
вот подобный код и он работает без нареканий
C++
1
2
3
4
5
6
DWORD __stdcall FGetIPBlockin(LPVOID lpParameter)
{
Form1->MemoDNS->Lines->Add("Çàïðîñ àäðåññà äëÿ "+Form1->Host->Text+"...");
   Form1->StatusBar1->Update();
 return 0;
}
попробуй с другими компонентами формы на крайняк из потока поработать, кстати вот мой вызов, может чем поможет
C++
1
CreateThread(0,0,Name,0,0,0);
а где функция другого потока у тебя описана/объявлена?
1
7 / 7 / 0
Регистрация: 28.09.2009
Сообщений: 52
28.08.2010, 16:19  [ТС] 5
Поток прописан в Unit1.h
Попробую покопается с TTimer.
Вот сам исходник:
Вложения
Тип файла: rar Project.rar (4.7 Кб, 16 просмотров)
0
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
28.08.2010, 17:22 6
Цитата Сообщение от Killan Посмотреть сообщение
Поток прописан в Unit1.h
Попробую покопается с TTimer.
Вот сам исходник:
Попробую и я подсказать. Дело в том что с похожей проблемой я сталкивался. У меня в отдельном потоке обрабатывались поступающие данные из компорта и там же я их выводил на экран(в таблицу из принятых hex-символов). И вот у меня не было ошибок(ошибки возможно появились бы при более "расширенном" выводе этих данных и т.д.), но были всевозможные глюки. Как выяснилось, обращаться к компонентам VCL на форме в потоке нужно обязательно с использованием метода Synchronize иначе будут такие глюки или ошибки(как у Вас). Подробнее пока не готов ответить т.к. это писал в прошлом году и тогда все хорошо знал, а сейчас только опять вернулся к программированию на ПК(тогда было у меня это как хобби, сейчас уже больше как необходимость).
1
70 / 70 / 4
Регистрация: 02.07.2010
Сообщений: 228
28.08.2010, 18:08 7
перетащи код в cpp-файл, прям перед обработчиком первой кнопки и будет тебе счастье
1
28.08.2010, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2010, 18:08
Помогаю со студенческими работами здесь

Вывод информации из отдельного потока на форму
Приложение должно непрерывно выполнять какую-то задачу в отдельном потоке (например принимать и...

Определить время работы потока на вывод информации в контролл
не могу разобратся с потоками и Timer'ом что бы узнать сколько работает поток на вывод в TextBox чз...

Вывод информации в texBox2 и texBox3 на основании информации texBox1
Ребята, начанающему чайнику требуется помощь в написании проги. Прога пишется под тач скрин...

Рубрикация интенсивного потока информации
Добрый день! Я замыслил проект, в котором собираюсь анализировать документы, строить таксономии,...


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

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