0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 18
1

Многопоточное приложение

11.12.2018, 22:35. Показов 944. Ответов 2
Метки нет (Все метки)

Имеется приложение, которое имеет три потока. Каждый поток рисует в своем окне соответственно эллипс, прямоугольник и текстовую строку. Проблема заключается в том, что он не всегда отображает квадрат и эллипс, чаще всего программа просто зависает и все. Не могу понять где ошибка.
Delphi
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Image1: TImage;
    Image2: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
     hThread1,hThread2,hThread3:THandle;
     pFunc1,pFunc2,pFunc3:pointer;
     ThreadID1,ThreadID2,ThreadID3:CARDINAL;
implementation
 
{$R *.dfm}
 
Procedure Thread1;
begin
while true do
  begin
    With Form1.Image1.Canvas do
      Rectangle(3, 3, form1.Image1.Width, form1.Image1.Height);
  end;
end;
 
Procedure Thread2;
begin
 while true do
 begin
   With Form1.Image2.Canvas do
      Ellipse(0, 0, form1.Image2.Width, form1.Image2.Height);
 end;
end;
 
Procedure Thread3;
begin
 while true do
 form1.Edit1.Text:=inttostr(random(100));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.CleanupInstance;
  pFunc1:=@Thread1;
  hThread1:=CreateThread(nil,0,pFunc1,nil,0,ThreadID1);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Image2.CleanupInstance;
  pFunc2:=@Thread2;
  hThread2:=CreateThread(nil,0,pFunc2,nil,0,ThreadID2);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  pFunc3:=@Thread3;
  hThread3:=CreateThread(nil,0,pFunc3,nil,0,ThreadID3);
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
  TerminateThread(hThread1,0);
  TerminateThread(hThread2,0);
  TerminateThread(hThread3,0);
end;
 
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2018, 22:35
Ответы с готовыми решениями:

многопоточное программирование
ТОварищи, требуется помощь! суть вопроса такова, имеется многопроцессорная система, требуется...

Многопоточное приложение
Возник вопрос по поводу работы с паралельно запускающимися потоками. Есть ли метод который бы четко...

Многопоточное приложение
Совсем запарился, помогите. Задание: Разработать программу, которая создает в отдельном потоке...

Многопоточное приложение
Добрый день. Интересует вопрос насколько правильно будет использование в С++ Builder компонента...

2
5057 / 3943 / 1303
Регистрация: 14.04.2014
Сообщений: 18,143
Записей в блоге: 18
12.12.2018, 11:23 2
1. зачем вам winApi для этого, если в делфи испокон веков есть TThread ?
2. в ЛЮБОМ учебнике написано, что обращаться к VCL из потоков - противозаконно
0
2522 / 1329 / 221
Регистрация: 26.02.2009
Сообщений: 6,161
Записей в блоге: 5
13.12.2018, 18:50 3
Рисовать однопоточным Canvas'ом во многопотоке не очень хорошая идея.
У Canvas даже есть специальная критическая секция для удобства синхроизации(см методы Lock, TryLock и Unlock).
Если вам действительно важна скорость то от Canvas придётся отказаться в пользу самописных или иных API умеющих во многопоток.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2018, 18:50

Многопоточное приложение
У кого есть примеры многопоточных приложений или игр? Вот пример игры с 2мя шариками они...

Многопоточное приложение
Помогите пожалуйста реалзовать данное приложение в консоли VS C++ . Просто не понимаю принцыпы...

Многопоточное приложение
Требуется разработать многопоточное приложение (в качестве средства разработки следует использовать...

Многопоточное приложение на C#
помогите пожааалуйста написать многопоточное приложение на C#.Создать игру, где будут 2-3 барана и...


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

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

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