Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание потоков


Страницы:   1 2 3

Макака ©   (2016-03-15 15:48:00) 

Нужно создать 4 потока
Я правильно понял, для этого достаточно создать 4 класса TThread ?
И правильно ли я понял, что эти 4 потока будут выполняться на разных ядрах?


Макака   (2016-03-16 18:22:00) [21]

нужно ещё один поток создавать?


Макака   (2016-03-16 18:21:00) [22]

изменил тип массива на
Handles : array of THandle;
заговорила)
Но на этом приключения не закончились, до момента "приехали" виснет приложение.


Макака   (2016-03-16 18:07:00) [23]


if (WaitForMultipleObjects(4,@Handles[0],true,infinite) = WAIT_OBJECT_0) then
     ShowMessage('Всё, приехали!');

Молчит


Inovet   (2016-03-16 17:40:00) [24]

> [34] Макака   (16.03.16 16:54)
> if (WaitForMultipleObjects(4,@Handles,true,infinite) = 1)

Зачем 1? Вот здесь смотри символьные значения возврата
https://msdn.microsoft.com/en-us/library/windows/desktop/ms687025%28v=vs.85%29.aspx


Юрий Зотов   (2016-03-16 17:20:00) [25]

Handles - это, по сути, указатель. Поэтому @Handles - это адрес указателя, но не массива. А вот @Handles[0] - это адрес массива.


Макака   (2016-03-16 16:54:00) [26]

WaitForMultipleObjects и как он работает?)
делаю так, на 4 потока:

var  Handles : array of Cardinal;
..................
SetLength(Handles,4);
Thread_1:=TNewThread.Create(true);
 Handles[0]:=Thread_1.Handle;
 Thread_1.FreeOnTerminate:=true;
 Thread_1.Priority:=tpNormal;
 Thread_1.I1:=0;
 Thread_1.I2:=51;
 Thread_1.TreadNumb:=0;
 Thread_1.Resume;
...............................итак со всеми
 if (WaitForMultipleObjects(4,@Handles,true,infinite) = 1) then
     ShowMessage('Всё, приехали!');


Inovet   (2016-03-16 15:32:00) [27]

> [32] Макака   (16.03.16 15:24)
> а как это сделать?

WaitForMultipleObjects


Макака   (2016-03-16 15:24:00) [28]

Inovet это я прекрасно понял) а как это сделать?
Можно написать так Sleep(замерить макс время выполнения и написать сюда);
пойду погуглю ещё


Inovet   (2016-03-16 15:15:00) [29]

С отдельной DLL на каждый поток - это какой стиль? По-моему китайский.


Inovet   (2016-03-16 15:14:00) [30]

> [29] Макака   (16.03.16 15:08)

Обяснили же: есть основной поток, который запускает остальные. Вот он пусть ждёт завершения и дальше делает ещё что-то.


Макака   (2016-03-16 15:08:00) [31]

А как сделать, чтобы после завершения работы всех 4ёх потоков выполнялся код?


Макака   (2016-03-16 14:29:00) [32]

создал 4 дллки, и 4 отедльных функции на экспорт в каждой, только так сработало


Юрий Зотов   (2016-03-16 14:27:00) [33]

> Макака   (16.03.16 14:15) [26]

1. Запускается не DLL, а функции из нее.
2. Можно, если в DLL нет специальных препятствий для этого.


Макака   (2016-03-16 14:15:00) [34]

Ещё такой вопрос, есть длл, можно её запустить в 4 разных потоках?


Макака   (2016-03-16 12:20:00) [35]

Всем спасибо!


Макака   (2016-03-16 12:19:00) [36]

Всё получилось, когда правильно скопировал экземпляры класса.


Rouse_   (2016-03-16 10:09:00) [37]


> Макака   (16.03.16 01:49) [19]

Ну ты код для начала посмотри, который я тебе написал выше, все вопросы отпадут.


Юрий Зотов   (2016-03-16 09:22:00) [38]

> Макака   (16.03.16 01:36) [18]

> создал несколько экземпляров, заполнил первый данными, копировал так:
> Экземпляр2:= Экземпляр1, этого же достаточно для копирования?

Нет. Любая объектная переменная по сути есть указатель, ссылка на объект. Сам объект лежит где-то в динамической памяти, а ссылка лишь хранит его адрес.

Поэтому Вы копируете не объект, а его адрес. То есть, обе переменные (и Экземпляр1, и Экземпляр2) у Вас указывают на один и тот же поток.


sniknik   (2016-03-16 08:38:00) [39]

> У меня нет в потоках обращения к одним и тем же VCL компонентам, поэтому синхронизация мне не нужна,
тебе может и нет, а программе нужна.

> поэтому 100 процентов дело в распараллеливании.
дело всегда в прокладке.


popcorn++   (2016-03-16 03:14:00) [40]

Удалено модератором


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо