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

Как сделать так, чтобы приоритет двух потоков задавал пользователь?

26.02.2020, 16:15. Показов 724. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите как сделать так, чтобы приоритет двух потоков задавал пользователь
вот программа
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
89
90
91
92
93
94
95
96
97
98
99
100
101
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
  procedure FormClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  ClickCount:integer;
  HThread1, HThread2: THandle;
  ThreadID1, ThreadID2: dWord;
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
HThread: THandle; 
ThreadID: DWORD;
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
procedure PaintEllipse;
var
x, y,d: integer;
Direction: Boolean;
dirx, diry: -1..1;
dc: hdc;
Rect: TRect;
begin
randomize;
D:=10;
dc:=getdc(Form1.Handle);
x:=10; y:=10;
Direction:=True;
dirx:=1; diry:=1;
repeat
with Rect do
begin
Left :=x;
Top:=y;
Right:=x+D;
Bottom:=y+D;
end;
FillRect (dc, Rect, COLOR_BTNFACE+1);
if Direction then x:=x+dirX else y:=y+dirY;
if x>Form1.ClientWidth-10-D then
begin
dirX:=-1; Direction:=False; x:=Form1.ClientWidth-10-D;
end;
if x<10 then
begin
dirX:=1; Direction:=False; x:=10;
end;
if y>Form1.ClientHeight-10-D then
begin
Direction:=True; dirY:=-1; y:=form1.ClientHeight-10-D;
end;
if y<10 then
begin
Direction:=True; dirY:=1; y:=10;
end;
Ellipse (dc, x, y, x+D, y+D);
Sleep (1);
until False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClickCount:=0
end;
procedure TForm1.FormClick(Sender: TObject);
begin
Inc (ClickCount);
if ClickCount = 1 then
begin
HThread1:=CreateThread(nil,0,@PaintEllipse,nil,0,ThreadId1);
if not SetThreadPriority(HThread1,THREAD_PRIORITY_Idle)
then ShowMessage('set priority failed');
if (HThread1 = 0) then ShowMessage ('CreateThread error');
end
else
if ClickCount = 2 then
begin
HThread2:=CreateThread(nil,0,@PaintEllipse,nil,0,ThreadId2);
if not SetThreadPriority (HThread2,THREAD_PRIORITY_Highest)
then showmessage('set priority failed');
if (HThread2 = 0) then ShowMessage ('CreateThread error');
end;
end;
 
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2020, 16:15
Ответы с готовыми решениями:

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

Как сделать так чтобы пользователь ввел TCHAR
Как сделать так чтобы пользователь ввел TCHAR ?

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

Как сделать так, чтобы пользователь сам вводил num.
Только начал изучать JAVA, появилось пару вопросов. Вот программка: public class TesT { /**...

9
3030 / 1652 / 653
Регистрация: 19.03.2019
Сообщений: 5,344
26.02.2020, 16:32 2
PAVEL_2, ты когда научишься код правильно оформлять? Неужели трудно выделить код и нажать на кпопку "DELPHI" на панели редактирования?!
0
Модератор
3658 / 2172 / 767
Регистрация: 15.11.2015
Сообщений: 8,721
26.02.2020, 16:58 3
Или нажать кнопку DELPHI и потом просто вставить текст, курсор уже будет стоять внутри тэга.

Добавлено через 1 минуту
Цитата Сообщение от PAVEL_2 Посмотреть сообщение
чтобы приоритет двух потоков задавал пользователь
А оно надо? Разве эти потоки грузят проц на 100%
0
1 / 0 / 0
Регистрация: 25.10.2019
Сообщений: 69
26.02.2020, 17:28  [ТС] 4
Не грузят , но надо
0
5793 / 4533 / 1433
Регистрация: 14.04.2014
Сообщений: 20,196
Записей в блоге: 20
26.02.2020, 21:05 5
в делфи есть специально выделенный класс TThread у него есть свойства нужные, в чем вопрос-то
зачем весь этот WinApi ?
0
Модератор
3658 / 2172 / 767
Регистрация: 15.11.2015
Сообщений: 8,721
26.02.2020, 21:36 6
PAVEL_2, функция winapi SetThreadPriority(FHandle, Priorities[Value]) - эта строка из исходников TThread. Приоритеты заданы в массиве
Delphi
1
2
3
4
5
const
  Priorities: array [TThreadPriority] of Integer =
   (THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL,
    THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL,
    THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_TIME_CRITICAL);
Добавлено через 58 секунд
Вообще, действительно, почему бы не использовать TThread?
1
1 / 0 / 0
Регистрация: 25.10.2019
Сообщений: 69
27.02.2020, 10:45  [ТС] 7
А можно пж полностью прогу написать , а то я недавно начал изучать делфи и многого не знаю.
0
5793 / 4533 / 1433
Регистрация: 14.04.2014
Сообщений: 20,196
Записей в блоге: 20
27.02.2020, 14:22 8
нет, нельзя
если у вас есть конкретный вопрос - расскажем
вопрос был какой? как пользователь задает приоритет потока?
вот
представим, что в combobox1 список доступных приоритетов
тогда
Delphi
1
2
h:=TMyThread.Create(true);
h.priority := combobox1.itemIndex;
вот мы и задали приоритет потоку H

ответ?
0
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
27.02.2020, 14:34 9
Цитата Сообщение от PAVEL_2 Посмотреть сообщение
А можно пж полностью прогу написать , а то я недавно начал изучать делфи и многого не знаю.
Я надеюсь, вы понимаете, к чему может привести задание приоритета потока пользователем? Если вы недавно начали изучать Делфи, то изменение приоритета потока, имхо, должно быть на последнем месте в плане реализации, потому как для себя я, например, выработал простое правило: если tpNormal по каким-то причинам не устраивает, то это говорит о проблемах в реализации этого потока.
0
Модератор
3658 / 2172 / 767
Регистрация: 15.11.2015
Сообщений: 8,721
29.02.2020, 05:58 10
PAVEL_2, кстати, функция потока объявлена неправильно. Это должна быть функция, принимающая на вход указатель на структуру со входными параметрами, и возвращающая dword.
Прототип функции от майкрософт:
C++
1
2
3
DWORD WINAPI ThreadProc(
  _In_ LPVOID lpParameter
);
0
29.02.2020, 05:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.02.2020, 05:58
Помогаю со студенческими работами здесь

Как сделать так,чтобы в поле пользователь мог вводить числа от 6 до 20?
Как сделать так,чтобы в поле пользователь мог вводить числа от 6 до 20?

Как в с++ сделать так, чтобы пользователь смог загрузить свой файл?
В файле хранятся названия блюд. Каждая строка отдельное название. Написать программу, которая...

Как сделать так, чтобы пользователь мог перемещать рисунок добавленный на форму?
Как сделать так, чтобы пользователь мог перемещать рисунок добавленный на форму в c# ?

Как сделать так чтобы пользователь не мог изменить размер и закрыть форму?
Как сделать так чтобы пользователь не мог изменить размер и закрыть форму?


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

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

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