Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Создание копии потока   Найти похожие ветки 

 
ksa2002   (2006-08-11 11:17) [0]

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


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

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


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

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

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 12:29) [3]


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


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

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

hThread1 = BeginThread(SomeThreadFunc, Param1)
hThread1 = BeginThread(SomeThreadFunc, Param2)

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


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

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

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


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


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


Да, конечно.

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


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


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


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

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


 
GanibalLector ©   (2006-08-11 23:56) [7]

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

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;



Страницы: 1 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
9-1140617584
Sour Smile
2006-02-22 17:13
2006.12.17
Подскажите математическую (физическую) модель цепочки


2-1164220023
Tray62
2006-11-22 21:27
2006.12.17
Подскажите код для Дельфи для открытия диалога графических файлов


2-1164884539
kulkse
2006-11-30 14:02
2006.12.17
из DBGrid в ListBox


15-1164275079
Ганна Юхимівна
2006-11-23 12:44
2006.12.17
Turbo Delphi - собственный Object Inspector


2-1164807554
webpauk
2006-11-29 16:39
2006.12.17
Проблема с RadioButton