1 (edited by sibprogsistem 2019-05-27 21:52:59)

Topic: зависание программы [решено]

в тот момент пока программа обменивается даными в вебсервисами она (зависает)  и продолжить работу можно только по окончанию этого процесса...
мне пужно,что бы программа по таймеру обменивалась данными с  другой БД через JSON, но при этом программа должна продолжать работу..

Re: зависание программы [решено]

vovka3003 wrote:

Блокировка происходит из-за того, что существующий в программе веб-запрос работает синхронно (ожидает получения данных). В вашем случае можно использовать асинхронный вызов winhttprequest через ole.

Пробовал такое, брал с примеров ... Но то ли руки у меня кривые то ли у программы нет такого..

Re: зависание программы [решено]

вот оно что!!
СПАСИБО!

Re: зависание программы [решено]

а как применить на процедуре отправки письма

  function mailerphp (Host,Username,Password,SMTPSecure,Port,mailFrom,mailTo,Subject,mailMessage: string ): string;
var
    slParam: TStringList;
    pass:string;
begin

    slParam := TStringList.Create;
    slParam.Add('Host='+Host);
    slParam.Add('Username='+Username);
    slParam.Add('Password='+Password);
    slParam.Add('SMTPSecure='+SMTPSecure);
    slParam.Add('Port='+Port);
    slParam.Add('setFrom='+mailFrom);
    slParam.Add('addAddress='+mailTo);
    slParam.Add('Subject='+Subject);
    slParam.Add('mmessage='+mailMessage);

    result:= HTTPPost('http://url/sendmail.php',slParam);
end

у меня получается полько пустое сообщение моментально получить )))))

Re: зависание программы [решено]

vovka3003 wrote:

В этом случае нужно менять GET на POST и прописывать ваши параметры в Send.

без результатно

Re: зависание программы [решено]

даже с вашим примером не ответа не привета...

Re: зависание программы [решено]

ну как сказать ??
пробую Ваш пример но ничего не присходит, просто ничего
надпись кнопки не меняется сообщение не выводится...


   
Ладно, бог с ним, с этим вариантом...

Re: зависание программы [решено]

vovka3003 wrote:

Может нужно это?

Последний Ваш пример постоянно выдает ошибку (не допустимое значение конфигурации)...
решил вернуться к первым примерам ...
суть дела вот в чем, парраметры я передаю в php на хосте..

сам php

<?php
 
require 'mail/PHPMailerAutoload.php';
 
$vernii_shifr = $_REQUEST[pass];
$pol_shifr = '1230';// пороль страницы

If($vernii_shifr == $pol_shifr){
$mail = new PHPMailer;
$mail -> isSMTP();
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html'; 
$mail ->Host = $_REQUEST[Host]; //smtp адрес
$mail ->SMTPAuth = true;
$mail ->Username = $_REQUEST[Username];    //Логин
$mail ->Password = $_REQUEST[Password];     //Пароль
$mail ->SMTPSecure = $_REQUEST[SMTPSecure];   
$mail ->Port = $_REQUEST[Port]; // порт
 
$mail ->setFrom($_REQUEST[setFrom]); 
$mail ->addAddress($_REQUEST[addAddress]);//Получатель

if (array_key_exists($_REQUEST[sendFile], $_FILES)) {
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_REQUEST[sendFile][sendFile]));
if (move_uploaded_file($_FILES[sendFile]['tmp_name'], $uploadfile)) {
$mail ->addAttachment($uploadfile, $_REQUEST[sendFile]);  //Прикрепить файл 
}
}

$mail ->isHTML(False);
 
$mail ->Subject = $_REQUEST[Subject]; //Тема письма
$mail ->Body    = $_REQUEST[mmessage];//<b>HTML</b> версия письма
//$mail ->AltBody = 'fggg';//Текстовая версия письма, без HTML тегов (для клиентов не поддерживающих HTML)

//Отправка сообщения
if(!$mail->send()) {
    echo 'Ошибка при отправке. Ошибка: ' . $mail->ErrorInfo;
} else {
    echo 'Сообщение успешно отправлено';
}
} else {
echo 'спам';
}

рабочая функция MVDB

function mailerphp (Host,Username,Password,SMTPSecure,Port,mailFrom,mailTo,Subject,mailMessage: string ): string;
var
    slParam: TStringList;
    pass:string;
begin
    pass:='1230';  // пороль страницы
    slParam := TStringList.Create;
    slParam.Add('pass='+pass);
    slParam.Add('Host='+Host);
    slParam.Add('Username='+Username);
    slParam.Add('Password='+Password);
    slParam.Add('SMTPSecure='+SMTPSecure);
    slParam.Add('Port='+Port);
    slParam.Add('setFrom='+mailFrom);
    slParam.Add('addAddress='+mailTo);
    slParam.Add('Subject='+Subject);
    slParam.Add('mmessage='+mailMessage);

    result:= HTTPPost('http://service-vv.ru/sendmail.php',slParam);
end;

если я правельно понял Ваши примеры то это должно быть так..

var
    xhr:variant;

procedure Form1_OnClick (Sender: TObject);
begin
  xhr:=0;
end;

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin

    WinHttpPost('https://service-vv.ru/sendmail.php','{"pas": "1230","Host": "smtp.jino.ru", "Username": "key@service-vv.ru","Password": "1009831995qw","SMTPSecure": " ","Port": "587","setFrom": "key@service-vv.ru","addAddress": "sibprogsistem@mail.ru","Subject": "test","mmessage": "test"}');
end;

function WinHttpPost(Url,Data: string):variant;
begin             
 try
    xhr.Open('POST',url,true);
    xhr.SetRequestHeader('content-type','application/json; charset=utf-8');
    xhr.Send(Data);               
  except
    ShowMessage(ExceptionMessage);
  end;
end;


begin
  xhr := CreateOleObject('WinHTTP.WinHTTPRequest.5.1');
end.

но у меня опять ничего не происходит...

Re: зависание программы [решено]

vovka3003 wrote:

Вы слили в паблик свой пароль кажется...

ерунда,  его можно сотни раз переписать ...

Re: зависание программы [решено]

короче самый простой вариант проверить работоспособность

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
http: variant;
url: string;
begin
 url:='http://myvisualdatabase.com';
 http:=createoleobject('WinHttp.WinHttpRequest.5.1');
 http.open('GET', url, False);
 http.send;
 showmessage(http.responsetext);
end;

получаю ответ... но вот проблема ...  Программа ожидает ответ и не позволяет с ней работать...

11 (edited by sibprogsistem 2019-05-20 10:21:21)

Re: зависание программы [решено]

true выдает ошибку
и вроди бы на других форумах писали, что что нужно добавить
timeout? но извеняюсь за вырожение (член группы не найден)  ((

Post's attachments

Attachment icon Безымянный.png 7.09 kb, 151 downloads since 2019-05-20 

12 (edited by sibprogsistem 2019-05-20 14:22:26)

Re: зависание программы [решено]

vovka3003 wrote:

Я не пойму зачем вам внешний php-костыль, скинул ведь нормальную (встроенную в винду) функцию на базе CDO.Message

что касается отправки писем, не хочу попасть на касяки в версиях windows и желаниях провадеров потому использую phpsendler..
потом хотел сделать подключение к базе данных через ssl серификат, но оказалось, что это не такто просто, джино вроди как может дать такие возможности но их вертуальный сервер упал через неделю после всех настроек, облака стоят много... в общем решил сделать API(получается дешево и сердито),  api та работает  можно и мобильныео приложение написать для работы с БД.. но вот опять касяк программа должна  время от времени обмениваться данными с этой БД (не будет же пользователь ожидать когда этот обмен закончится)..
   
в общем встал и не понимаю а стоит теперь все это делать?
   
может с батником попробовать... запускать батник, тот будет запускать доп приложение в фоновом режиме и оно будет производить этот обмен

Re: зависание программы [решено]

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

Re: зависание программы [решено]

программа многопользовательская, а значит не могу знать какой windows будет использоваться
потому php-mailer находится на хостинге
провайдера я в данном случае не выбираю...
465 и 587 перекрывают.. можно их открыть, но только для меня...

15 (edited by sibprogsistem 2019-05-27 16:06:16)

Re: зависание программы [решено]

помогите сделать эту асинхроннасть

http.open('GET', url, False); - работает...
http.open('GET', url, True); - ошибка OLE 80020009 (чего-то не хватает)..

Post's attachments

Attachment icon WinHttp.7z 2.88 kb, 245 downloads since 2019-05-27 

Re: зависание программы [решено]

vovka3003 wrote:

напишите за меня эту асинхроннасть

Как? Я оттестил и выдал вам несколько рабочих скриптов. В ответ вы опять что-то покорёженное скинули, можно было и не крепить к топику.
У меня все из того, что я отправил - функционирует, но разумеется оно требует правки под конкретные условия вашего индивидуально-заточенного php-скрипта. Что вы предлагаете - приехать к вам настроить на месте..?

я прошу не написать за меня а прошу помочь разобраться... Ваш пример у меня не работает..  посмотрите видео ... мой пример хотябы признаки жизни подает, но я не могу понять что за ошибка такая 80020009..
 
сколько пролазил по гуглу, нашел только две вещи  ... это какая-то ошибка SQL (майкрософт так написал))))) )
и наткнулся на winhttp.dll - что наводит на мысыль о том, что в этом играет роль сама ОС (((

https://yadi.sk/i/UvE0ePvjQAt0RQ

17 (edited by sibprogsistem 2019-05-27 23:31:25)

Re: зависание программы [решено]

в том-то и дело, что я должен был получить ошибку (мол такого города нет) хотя и в  случае указания реального города ответа все равно нет...
теймер дербанил, потому что пытался вызвать хоть какую-то ошибку...
данные недоступны ( не является конкретикой)  - именно по этому и просил помочь...
ну вот хоть теперь я понял, что все дело было в setTimeOuts, нужно разобраться как с ним работать.....
получать ответ можно из тойже процедуры просто http.setTimeOuts(90000,90000,90000,90000); почему-то не срабатывает и процедура не успевает получить ответ...
сделал это с помошью таймера и все ок...

Post's attachments

Attachment icon test.7z 3.09 kb, 266 downloads since 2019-05-28 

Re: зависание программы [решено]

vovka3003 wrote:
sibprogsistem wrote:

Ваш пример у меня не работает..  посмотрите видео ...

Ничего не пропустили?
https://youtu.be/ZfeqnNAMvjg

Да в конце я про это вспомнил ))) именно это и навело на мысль о том, что нужно больше времени дать