Не создаётся поток на другой машине

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
arra
новенький
Сообщения: 27
Зарегистрирован: 30.03.2013 22:58:27

Не создаётся поток на другой машине

Сообщение arra »

Добрый вечер.
написал прогу, которая по клику на кнопку создаёт процесс, производит полезную деятельность плюс через Synchronize время от времени обновляет текст в edit-е на форме. У меня на компе всё работает. Человек запускает на другом компе - нифига. По клику на кнопке ничего не происходит - ошибок не вываливается но и текст в edit-е не меняется. Такое ощущение что просто не создаётся поток. Как такое может быть? Система и там и там Windows 7, код создания потока:

Код: Выделить всё

if MyThread = nil then
  begin
    MyThread := TMyThread.Create(True);
    MyThread.FreeOnTerminate:=true;
    MyThread.Resume;
  end;


Проверка на nil нужна для того, чтобы поток нельзя было запустить дважды. На всякий случай делаю по FormCreate

Код: Выделить всё

MyThread := nil;
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Поставь на той машине Лазарь с дебагером, и смотри что там происходит... Разрядность ОС совпадают?
arra
новенький
Сообщения: 27
Зарегистрирован: 30.03.2013 22:58:27

Сообщение arra »

Поставил отладчик, оказалось, процесс запускается, просто не проходит логин на почту по pop3 (именно это и делает процесс). А на моей машине проходит... Использую synapse. Подскажите, где посмотреть код ошибки, которую вернул pop3 при попытке логина? Кусок работающий с почтой:

Код: Выделить всё

procedure TMyThread.Execute;
var
  serv,login,pass,save_path:string;
  IniF:TINIFile;
  pop3:Tpop3send;
  FMimeMsg: TMimeMess;
  FMimePart: TMimePart;
  FMimePart2: TMimePart;
  LoginOk: Boolean;

  nMsgCount: Integer;
  nMsg: Integer;
  n: Integer;
  FName:string;
  Name_mail,buf_data:String;
begin
 IF (FileExists('connect.ini')) then
 begin
   Inif := TINIFile.Create('connect.ini');
   serv := iNiF.ReadString('connection','server','');
   login := iNiF.ReadString('connection','login','');
   pass := iNiF.ReadString('connection','password','');
   //save_path := iNiF.ReadString('save','path','');

  while not terminated do
  begin
    sleep(100);
    //GetEmail(serv,login,pass,'C:\sav_file');

    FMimeMsg:=TMimeMess.Create;
pop3:=Tpop3send.Create;
FMimePart:=TMimePart.Create;
FMimePart2:=TMimePart.Create;
FMimePart:=nil;
FMimePart2:=nil;
 try
  pop3.TargetHost:=serv;
  pop3.UserName:=login;
  pop3.Password:=pass;

  LoginOk := pop3.Login;
  if (LoginOk) then //вот здесь-то как раз и не ОК, не проходит логин
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Коды ошибок POP3 зависят от сервера к которому вы конектитесью.
Хрустальный шар мне подсказывает что сервер мелкософтский.
Гляньте тут http://www.nthelp.com/50/Outlook_error_codes.htm может поможет.
Если юниксовый сервер, то на линуксе man pop3
arra
новенький
Сообщения: 27
Зарегистрирован: 30.03.2013 22:58:27

Сообщение arra »

Вот те раз, а я-то думал что коды ошибок прописаны в протоколе pop и не зависят от реализации.
Но вопрос не в этом, а в том, где этот код сидит в лазаревском объекте? Как свойство называется? Ничего похожего на свойство error я у объекта Tpop3send не нашёл.
З.Ы. Сервер - pop.gmail.com
З.З.Ы. Как отловить момент, когда до сервера вообще не доходит? Например, закрыт межсетевым экраном порт 110?
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Telnet поможет узнать версию POP3 сервера гугла. Для этого конкретного сервера и надо смотреть.
arra писал(а):Ничего похожего на свойство error я у объекта Tpop3send не нашёл.

Ну там что-то типа ответа сервера надо смотреть. Сервер строку клиенту отсылает. Строку и парсить надо на предмет кода ошибки.

ЗЫ. Протокол то один, но вот реализации немного отличаются друг от друга. M$ так вообще отсебятину всегда гонит.
arra
новенький
Сообщения: 27
Зарегистрирован: 30.03.2013 22:58:27

Сообщение arra »

Погонял в отладке. Получается странная вещь: на моём компе даже если передаю неправильный пароль от почты, строка
LoginOK := pop3.login
отрабатывает мгновенно и в свойстве ResultString потом описание ошибки. На подопытном компе эта строка в отладке думает секунд 10, логин не проходит и в ResultString пусто.
Что это может быть?
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

FileWoll должно быть.
В консоли телнетом потыкайся.
arra
новенький
Сообщения: 27
Зарегистрирован: 30.03.2013 22:58:27

Сообщение arra »

Что такое fileWoll? FireWall имелся в виду? Вроде не стоит он на том компе и брандмауэр винды отключен.
Но телнет попробую.
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Ага :) пипки перепутал :)
Ответить