Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];

Вниз

потоки   Найти похожие ветки 

 
Alexno   (2003-05-14 15:05) [0]

Здравствуйте! Как сделать одновременное подключение к нескольким серверам с использованием TNMPOP3 и с использованием нитей?
Из главного модуля плодятся потоки. Вот как POP"ы надо описать и использовать тут?
(ThreadsRunning : Integer - для непревышения предустановленного количества одновременно работающих соединений)
===

unit Threads;
interface
uses
Windows, SysUtils, Classes, NMpop3, forms;
type
TChkHostsThread = class(TThread)

protected
procedure Execute; override;

public
fHost:string;
constructor CreateIt(const AHOST:string);
end;

implementation

uses Main;

constructor TChkHostsThread.CreateIt(const AHOST:string);
begin
inherited Create(False);
fHost:=AHOST;
FreeOnTerminate:=TRUE;
Inc(Main.ThreadsRunning);
end;

function CheckHost(host : string) : integer;
begin
Result:=0;
// тут будет все основное выполняться, соединение с нужным host и т.д.
end;

procedure TChkHostsThread.Execute;
begin
CheckHost(fHost);

Terminate();
Dec(Main.ThreadsRunning);
end;

end.


 
Dms   (2003-05-14 15:13) [1]

в CheckHost надо создать объект TNMPOP3 (объявленный в классе потока), а в конце его надо .Free



 
Alexno   (2003-05-14 15:18) [2]

а в какой секции его объявить надо?


 
Dms   (2003-05-14 15:24) [3]

объявиви в private, а вообще это _почти_ неважно


 
Alexno   (2003-05-14 15:28) [4]

А саму фонкцию CheckHost тоже надо в классе объявлять? Потому как если не в классе, то объявленного объекта из нее не видно


 
Digitman   (2003-05-14 15:28) [5]


> а в какой секции его объявить надо?


да в какой хочешь !) этот объект будет использован только в тек. юните и только данным экз-ром класса потока ... для надежности можешь в private разместить, к примеру

>Inc(Main.ThreadsRunning);
>Dec(Main.ThreadsRunning);

не есть это хорошо.
либо используй семафор/мьютекс (что лучше в дан.случае) либо ф-ции InterlockedIncrement/Decrement (для исключения ситуации одновременного обращения нескольких потоков к этой переменной)


constructor TChkHostsThread.CreateIt(const AHOST:string);
begin
inherited Create( True); // !!!!!
fHost:=AHOST;
FreeOnTerminate:=TRUE;
Inc(Main.ThreadsRunning);
Resume;
end;

procedure TChkHostsThread.Execute;
begin
CheckHost(fHost);

// Terminate(); это - лишнее
Dec(Main.ThreadsRunning); // это лучше перенести в дан.случае в переопределенный метод-деструктор
end;



 
Dms   (2003-05-14 15:46) [6]


> А саму фонкцию CheckHost тоже надо в классе объявлять? Потому
> как если не в классе, то объявленного объекта из нее не
> видно


потому что он объявлен в Private. Сделай CheckHost методом класса потока - так будет красивей.



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

Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
14-83671
Ivan61
2003-05-04 11:44
2003.05.26
Как установить RXLib для D7?????


3-83420
Iliasaur
2003-05-07 10:12
2003.05.26
---|Ветка была без названия|---


4-83817
Kron
2003-03-31 12:31
2003.05.26
Как обработать событье максимизации формы?


1-83493
Denis
2003-05-13 13:59
2003.05.26
Как из Kylix запустить другое приложение ?


14-83718
Dremin-s
2003-05-06 13:58
2003.05.26
Где в delphi 7 компоненты serversocket и clientsocket ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский