Re: Потоки в "Дельфевых" библиотеках
От: dnsokol Россия  
Дата: 04.05.04 14:39
Оценка:
Здравствуйте, YuRock, Вы писали:

YR>Доброго всем дня! Вот нужно мне написать плугин, который работает с железякой ч-з Com-порт.

YR>Вначале я написал экзешник (для тестов, да и отлаживать exe удобнее, чем dll) — в потоке опрашиваю Com-порт, ну и, кое-что делаю. Когда полностью отладился, все заработало — решил перенести функциональность в dll.

YR>И тут началось самое интересное! В dll я сделал отдельный модуль, который выглядит примерно так:

[skip]
С моей колокольни это видится так:
1. Создаёшь нужный тебе объект, потом в DLL описываешь функцию
function ThreadFunc(s: Pointer):DWORD;stdcall;
var
  [skip] 
begin
  [skip] 
  ExitThread(0);
end;


далее делаешь ещё одну, вида
 
function RunProc : Cardinal;
   result := CreateThread(nil,512,@ThreadFunc,Self,0,ThreadId);
    // возвращаемое значение result лучше сохранить, 
    // т.к. если вдруг нужно будет эктсненно прибить этот трид, нужно будет знать его ID
end;


вот собственно и всё, и не надо возиться с делфёвым тридом, имхо, если потоки "из DLL" (если можно так выразиться) плодить, то лучше воспользоваться WinAPI. Единственное, придётся повозиться с тем, что бы корректно эти потоки прибивать, когда выходишь из проги, когда процесс ещё выполняется. Для этого пригодится

var
  result : DWORD;
begin
    TerminateThread(ThreadLink, result); // ThreadLink - это то, что вернуло RunProc
    ThreadLink := 0;


ну и если потоку надо общаться, то можно всё это оформить сообщениями Windows или накидать простенькие COM интерфейсы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.