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

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

Создание копии потока [D6, D7]


ksa2002 ©   (2006-08-11 11:17:00) 

Есть поток №1 и порт который он обслуживает
Если у нас 1 порт и 1 поток то всё нормально.
А ели 10 -20 портов? при этом они идентичны по событиям.
Не  писать же мне один и тот же поток (меняя только имена портов). Наверно можно создать копию потока и передать ему переменную? (только я не знаю как :) )


GanibalLector   (2006-08-11 23:56:00) [1]

Вот,пример,кстати :

function Potok(Param: PMyMode): DWord;
begin
 ...
 with Param^ do
 begin
   //
 end;
  Dispose(Param);
end;

procedure TWait.Go;
 var ThreadID:DWord;
     Ph: PMyMode; // типа моя структура
begin
 New(Ph);
 Ph^.Port:=Port;
 Ph^.Baud:=Baud;
 Ph^.Mode:=Mode;
 Ph^.Handle:=Handle;
 CloseHandle(BeginThread(nil,0,@Potok,Ph,0,ThreadId));
end;


ksa2002   (2006-08-11 12:49:00) [2]

всё ) ...большое спасибо за помощь ) ..теперь я ещё немого поумнел )


Сергей М.   (2006-08-11 12:46:00) [3]


> если ф-я которую я вызвал, в свою очередь обращается к дургой
>  ф-и в данном потоке , это будет корректно вызванно ?


Да, конечно.

При этом следует понимать, что любая вызванная ф-ция выполняется в контексте того же потока, в котором выполняется вызывающая ф-ция.


> вызов Thread.Execute в которой вызываются другие ф-ии полностью
> будет работать непересеакаясь с другим потоком и нормально
> вызыватся?


Пересечение может быть только на уровне общих данных, если таковые имеются.


ksa2002   (2006-08-11 12:37:00) [4]

понятно
ещё вопрос если ф-я которую я вызвал, в свою очередь обращается к дургой  ф-и в данном потоке , это будет корректно вызванно ?

т.е. вызов Thread.Execute в которой вызываются другие ф-ии полностью будет работать непересеакаясь с другим потоком и нормально вызыватся?


Сергей М.   (2006-08-11 12:29:00) [5]


> написано BeginThread spawns a new thread of execution


Как написано, так оно и есть - вызов BeginThread() порождает новыйпоток, в котором будет выполнена ф-ция, указанная параметром ThreadFunc.
Ф-ция ThreadFunc при этом сможет получить указанный параметр Parameter.

Попросту говоря, псевдокод

hThread1 = BeginThread(SomeThreadFunc, Param 1)
hThread1 = BeginThread(SomeThreadFunc, Param 2)

вызовет к жизни два независимых новых потока, выполняющих параллельно одну и ту же ф-цию, но с разными параметрами.


ksa2002   (2006-08-11 12:21:00) [6]

почитал в хелпе и возник вопрос

BeginThread
(void * SecurityAttributes, unsigned StackSize, TThreadFunc ThreadFunc, void * Parameter, unsigned CreationFlags, unsigned &ThreadId);

т.е. идёт вызов  ThreadFunc находямщя в потоке, где  hreadId это ид потока который мы юзаем.
тобишь я вызово ф-ию она выполнится и всё ?? или она запустит поток с этого места  (этой-фии) передав параметр? (хотя написано BeginThread spawns a new thread of execution and sets the global IsMultiThread variable)

мне непонятен механизм запуска потока в данном случаи .


Сергей М.   (2006-08-11 11:18:00) [7]

Функция BeginThread() для сей цели имеет вх.параметр (см.справку)


Наверх

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