Главная страница
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.032 c
2-1164977633
Basis
2006-12-01 15:53
2006.12.17
TreeView


11-1140581535
LAutour
2006-02-22 07:12
2006.12.17
Возможно ли разместить KOLButton на KOLSplitter?


15-1164372798
grisme
2006-11-24 15:53
2006.12.17
легкий по весу GUI


2-1164758130
осеДЛаЛ
2006-11-29 02:55
2006.12.17
Как отлаживать dll ки ?


3-1160295880
Павел Калугин
2006-10-08 12:24
2006.12.17
Несколько вопросов по Ораклу