Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
TUberwer
18 / 18 / 10
Регистрация: 04.07.2013
Сообщений: 260
Записей в блоге: 1
1

Вывод результата работы нескольких потоков в Memo - выводится данные только последнего

27.07.2014, 18:33. Просмотров 903. Ответов 6
Метки нет (Все метки)

Всем привет.
По нажатию кнопки я создаю определенное количество потоков.
mythread := tmythread.create(false);

в каждом потоке у меня обрабатывается информация, а потом мне нужно вывести эту информацию.

Я создал тут процедуру дополнительную
Delphi
1
2
3
4
5
6
7
TMyThread = class(TThread)
    private
    
  protected
    procedure Execute; override;
    procedure out;
  end;
Delphi
1
2
3
4
procedure TMythread.out;
begin
log(info);
end;
И вызываю эту функцию по клику по кнопке
Delphi
1
2
3
4
procedure MyProgramm.GetInfoButton(Sender: TObject);
begin
mythread.out;
end;
(функция log() выводит текст в мемо, прежде обработав его)
и в итоге у меня в мемо появляется информация только с последнего потока,
как мне получить информацию со всех потоков?(если поставить вызов информации в цикле, типа такого:
Delphi
1
2
3
4
5
6
7
procedure MyProgramm.GetInfoButton(Sender: TObject);
begin
while (i < количество потоков) do
begin
mythread.out;
end;
end;
, то просто несколько раз выводится информация с последнего аккаунта)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2014, 18:33
Ответы с готовыми решениями:

Табулирование функции, вывод результата в Memo
Протабулировать функцию, результат вывести в поле Memo.

Умножение числа на edit и вывод результата в memo
Добрый день! Помогите с кодом, как сделать чтоб по нажатию кнопки считвалась...

Вывод нескольких значений в Memo
Всем доброго времени суток.Программа ищет среди значений минимальное по каждой...

Вывод нескольких данных в memo из dbgrid
У меня в DBGrid отображается список шифров заболеваний и мне нужно, чтобы при...

Вывод результата нескольких вычислений в разные Label
button - кнопка, как там сделать так чтоб в одной кнопке он подсчитывал сразу...

6
саша40
-111 / 293 / 47
Регистрация: 14.08.2012
Сообщений: 2,571
27.07.2014, 19:49 2
о синхронизации слышали? О том что функция log занята в kernell32.dll и выдает логарифм с основанием 10 из того что в неё задали знали?
0
cotseec
Пишу на Delphi...иногда
1408 / 1267 / 285
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
Завершенные тесты: 3
27.07.2014, 19:57 3
Лучший ответ Сообщение было отмечено TUberwer как решение

Решение

Цитата Сообщение от TUberwer Посмотреть сообщение
в каждом потоке у меня обрабатывается информация, а потом мне нужно вывести эту информацию.
у TThread есть событие OnTrminate, судя по всему информацию необходимо показывать по окончанию работы потока, назначьте всем потокам один обработчик OnTerminate, в нем и выводите данные
1
TUberwer
18 / 18 / 10
Регистрация: 04.07.2013
Сообщений: 260
Записей в блоге: 1
27.07.2014, 20:30  [ТС] 4
Так, с этим получилось, но теперь есть новый вопрос. У меня есть кусок кода, который должен выполняться в каждом потоке, но не сразу, а тоже по выполнению определенного условия.
Тут так же само как и с первом, код выполняется только в последнем потоке(если делать отдельной процедурой).
Пока только одна идея, в конце потока сделать цикл бесконечный, который будет проверять глобальную переменную типа boolean, когда она будет равна тру(когда условие мое присвоит переменной значение тру), программа выйдет из цикла, и подйдет дальше по коду, и соответственно выполниться мой код.. но это же грузить будет сильно, если потоков будет 10-20.. Может другие способоы есть
0
northener
пофигист широкого профиля
3427 / 2326 / 631
Регистрация: 15.07.2013
Сообщений: 13,779
28.07.2014, 02:27 5
Цитата Сообщение от TUberwer Посмотреть сообщение
и в итоге у меня в мемо появляется информация только с последнего потока,
Разумеется. Ибо в процедуре MyProgramm.GetInfoButton используется некая переменная mythread. А переменная может хранить только одно значение. Больше в неё не влазит.
Цитата Сообщение от TUberwer Посмотреть сообщение
Так, с этим получилось, но теперь есть новый вопрос. У меня есть кусок кода, который должен выполняться в каждом потоке, но не сразу, а тоже по выполнению определенного условия.
Тут так же само как и с первом, код выполняется только в последнем потоке(если делать отдельной процедурой).
Опять те же грабли.
0
TUberwer
18 / 18 / 10
Регистрация: 04.07.2013
Сообщений: 260
Записей в блоге: 1
28.07.2014, 15:39  [ТС] 6
ну я это понимаю, вот и пишу сюда. Я не знаю как обратиться сразу ко всем второстепенным потокам.. Я понимаю что это не правильно, и спрашиваю как правильно, а вы мне отвечаете "это не правильно". Спасибо за ответ, я это и так знал.
0
mss
2633 / 2258 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
07.10.2014, 22:50 7
Цитата Сообщение от TUberwer Посмотреть сообщение
не знаю как обратиться сразу ко всем второстепенным потокам
А зачем тебе к ним обращаться, тем более одновременно ?
Они делают каждый свое дело - затем они собственно и созданы.. Зачем потребовалось вмешиваться в их работу ? На это должны быть веские основания)
0
07.10.2014, 22:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2014, 22:50

Экранная клавиатура, как вводить данные не только в Memo?
У меня есть экранная клавиатура вот такого вида (на фото) где я набираю текст...

Поместить в Combobox и Едит) данные из акцесса+вычисление и вывод результата
:(нужно чтобы некая табл , сделанная в акцессе, вылазила на некой форме, да не...

Перенести данные из memo в одной форме в memo в другой
Как перенести данные из memo в одной форме в memo в другой?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru