Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 7
1

Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток))

13.10.2011, 10:00. Просмотров 2051. Ответов 9
Метки нет (Все метки)


Помогите пожалуйсмта))))) Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2011, 10:00
Ответы с готовыми решениями:

Ошибка-Текущий поток должен быть задан как поток однопоточного контейнера STA
Значит модуль в нем классы.Я создаю свое гуи.Так вот при вызове процедуры котрая копирует текст(в...

OpenFileDialog и потоки: Текущий поток должен быть задан как поток однопоточного контейнера (STA)
Со стартового окна запускаю формы вот так: new Thread(() => { ...

Вызывающий поток не может получить доступ к объекту, так как его владельцем является другой поток
Есть форма MainWindo, есть класс AB. В форме единая точка доступа к элементам формы. ...

Как организовать поток в FMX C++ Builder?
Как, не используя средства Delphi, организовать поток? Буду признателен за намек или может быть...

9
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 491
13.10.2011, 19:29 2
МарияKarina, Тема на форуме изъеденная
https://www.cyberforum.ru/cpp-... 51509.html
Хорошо описывает Архангельский, по параллельным потокам.
рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток))
И рисовать то же, как г...а на форуме валяется.
Цикл для radiobatton
1
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 7
13.10.2011, 22:19  [ТС] 3
СПАСИБО)

Добавлено через 22 минуты
ну если что пишите ваши варианты этой программы)))я же такой чайник в этом деле)
0
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 491
14.10.2011, 13:23 4
В воскресенье, раньше не когда. Если не помогут.
0
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 7
14.10.2011, 16:49  [ТС] 5
я буду ждать)))))))))))))
0
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 491
16.10.2011, 20:42 6
Привет! Давай приступим. Для чего именно два потока, а нет один?
А программу должна сделать сама, а мы будем помогать. Только соображай и правильно ставь вопросы.
И насколько ты знаешь С++ в Buildere?.
И что эта программа звука, или еще какой то ф...ни.
Для начала брось Бутон, а в него
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DWORD WINAPI ThreadFunc(LPVOID P)
//TestThread(LPVOID lpParameter)
{
  // ваши действия
  Form1->Label1->Caption = "Поток выполняется" + IntToStr(P);
  return 0;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD lpThreadId;
int lpParameter = 1;
HANDLE hT = CreateThread(0,0,ThreadFunc, &lpParameter,0,&lpThreadId);
CloseHandle(hT);
}
И для начала кинь компоненту Timer1, на Form1
Жду ответа, работает?
0
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 7
16.10.2011, 21:36  [ТС] 7
ооо)))Бутон кинула...таймер поставила)))функцию объявила)))
Запустила проект...нажала кнопочку, и появилось в лейболе, что поток выполняется))))больше ничего

Я неочень хорошо знаю С++ Builder.. мне просто задали сделать лабораторную...а с потоками уж очень тяжело у меня))))
Надо чтобы на форме было так: запустить первый поток, который рисует к примеру квадраты, и можно одновременно запустить второй поток, который рисует к примеру прямоугольники или звёздочки))
вот и всё задание))))


А мне бы очень хотелось с вашей помощью разобраться с потоками и научиться не впадать из-за них в панику)))

Добавлено через 13 минут
может быть в это место

C++
1
2
3
4
5
6
7
8
[CPP]void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
   DWORD lpThreadId;
int lpParameter = 1;
HANDLE hT = CreateThread(0,0,ThreadFunc, &lpParameter,0,&lpThreadId);
CloseHandle(hT);
}
[/CPP]


записать цикл for с помощью которого и начнём рисовать к примеру трёхугольники

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
   DWORD lpThreadId;
int lpParameter = 1;
HANDLE hT = CreateThread(0,0,ThreadFunc, &lpParameter,0,&lpThreadId);
CloseHandle(hT);
for(int i=0; i<10; i++)  {
 Image1->Canvas->Rectangle(0, 0, Image1->Width, Image1->Height) ;
Image1->Canvas->MoveTo(200, 100);
Image1->Canvas->LineTo(200, 200);
Image1->Canvas->LineTo(300, 100);
Image1->Canvas->LineTo(200, 100);
}
но что появился только один трёхугольник...а вот больше не рисует((( ах я бездарность!
0
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 491
17.10.2011, 10:14 8
МарияKarina,
Не правильно мыслишь, ты бросила в бутон, а надо в
C++
1
2
DWORD WINAPI ThreadFunc(LPVOID P)
Form1->Image1->....
И Таймер нужно задействовать.
Надо чтобы на форме было так: запустить первый поток, который рисует к примеру квадраты, и можно одновременно запустить второй поток, который рисует к примеру прямоугольники или звёздочки))
вот и всё задание))))
А зачем поток? Все намного проще, закинь код в таймер
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
26
27
28
29
30
31
32
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 Timer1->Enabled = false;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        msec++;
        if ( sec < 59 )
            sec++;
        else
        {
            sec = 0;
            min++;
        }
Form1->Image1->Canvas->Pen->Color = clRed;
Form1->Image1->Canvas->LineTo(msec,180);//По этому принципу бросай квадратики, кружочки или зайчиков.
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
Kvadrat = 1;
Krug = 0;
Zajchic = 0;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer1->Enabled = true;
Kvadrat = 0;
Krug = 1;
Zajchic = 0;
}
Да и не забудь интервал таймера установить, наверно 100.
0
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 7
17.10.2011, 20:56  [ТС] 9
Знаете просто задание было выполнить только с помощью потоков(
0
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 491
06.11.2011, 13:21 10
МарияKarina,
задание было выполнить только с помощью потоков
Вот три примера потоков. Прекрасное пособие Архангельского. Готовые примеры.
Подкидываем в Image1 квадратики(это первый поток будет рисовать) и кружочки (2ой поток).
0
Вложения
Тип файла: rar Поток в одну нить.rar (420.3 Кб, 47 просмотров)
Тип файла: rar Поток в две нити.rar (415.8 Кб, 62 просмотров)
Тип файла: rar Поток сложный пример.rar (412.8 Кб, 46 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2011, 13:21

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны
Суть проблемы: Создаю приложение по sql. При создании формы с датагридом и пр. отдельным потоком...

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны
есть следующая функция, при клике по Open выдает ошибку: Текущий поток должен быть задан как поток...

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны
пишет:Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE...

Ошибка: вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
Ошибка в &quot;progressBar1.Value += 50;&quot;, вызывающий поток не может получить доступ к данному объекту,...

Поток потоков
Допустим по нажатию кнопки запускается 4 потока (Threads). Как отследить завершение какого-либо из...

Как уведомить первый поток о том, что второй закончил свою работу
Добрый день. Проблема такая. Есть 2 класса. Первый MyLogic - отвечает за логику приложения,...


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

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

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