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

Вниз

gпопытка подключения к неработаюшему серверу   Найти похожие ветки 

 
sten   (2004-10-28 16:02) [0]

Здравствуйте !

есть такая проблема : во время попытки подключиться к серверу MSSQL, если сервер недоступен, нужно через интервал
в 1 секунду вывести форму, на которой будет написано "подождите".
Так как при попытке подключиться к неработающему серверу метод ADOQuery.Open полностью подвешивает программу,
просто выполнить form2.Show в таймере невозможно. Поэтому я попытался запихать это в отдельный поток.
(пока без всякого таймера, т.к. не работает даже без него)
Теперь я пытаюсь вызвать поток до попытки соединения, однако form2 появляется только через 8 сек., вместе с
сообщением об ошибке.

procedure TForm1.Button1Click(Sender: TObject);
var t:tmythread;
begin
t:=tmythread.Create(true);
t.Resume;
form1.ADOQuery1.SQL.Text:="select * from table1";
form1.ADOQuery1.Open;
end;

procedure tmythread.Execute;
begin
 synchronize(form2.Show);
end;

Почему так происходит, ведь второй поток должен нормально выполняться, вне зависимости от того, чем занят основной ?


 
Johnmen ©   (2004-10-28 16:05) [1]

Зачем же через 1 сек. ? Сразу и без потока.
form2.Show;
Aplication.ProcessMessages;
form1.ADOQuery1.Open;


 
sten   (2004-10-28 16:17) [2]

нет, надо именно через секунду, так как в случае наличия сервера, это форма будет мигать. (т.е. если ответ пришел через 0.2 сек, форму показывать ненадо). Мне надо вывести сообщение, только если ответа с сервера нет в течении этого промежетка времени.


 
Johnmen ©   (2004-10-28 16:32) [3]

:)))
А если соединение произошло через 1.1 сек. ? Мигнуть на 0.1 ?
form2.Show;
Aplication.ProcessMessages;
Sleep(1000);
form1.ADOQuery1.Open;


 
sten   (2004-10-28 16:46) [4]

>Sleep(1000);

очень смешно

если соединение установлено и сервер работает, то ответ будет приходить раньше, чем через секунду (в большинстве случаев). Задержка на секунду и более будет означать проблемы с сервером или со связью. Но я не хочу, чтобы приложение просто висело 8 сек, пусть лучше сообщение показывает.
Так как там насчет потоков, почему они себя так ведут ?


 
Johnmen ©   (2004-10-28 16:57) [5]

Потому, что чинить наручные часы кувалдой не стОит.
А что там с таймером ? Его обработчик, надеюсь, вызывается ? :)


 
sten   (2004-10-28 17:15) [6]

если имеешь в виду что-то типа

procedure tmythread.Execute;
var t:ttimer;
begin
t:=ttimer.Create(application);
t.Interval:=1000;
t.Enabled:=true;
t.OnTimer:=do_smth;
end;

то тоже неработает. Что-же не так ?


 
Johnmen ©   (2004-10-28 17:24) [7]

Имею в виду просто таймер. Без своих потоков.


 
Johnmen ©   (2004-10-28 17:32) [8]

Увы... Таймер тоже "умирает"...


 
sten   (2004-10-28 17:36) [9]

я не понимаю, почему так происходит, ведь это другой поток, неужели query умудряется подвешивать все потоки ?


 
sniknik ©   (2004-10-28 20:44) [10]

synchronize(form2.Show);
запускается в основном. у тебя нет 2х потоков. не, код ты написал, но по факту нет.


 
sten   (2004-10-29 14:39) [11]

что-же делать ?


 
sten   (2004-10-31 10:47) [12]

ну что, неужели никто с потоками не работал ?


 
sniknik ©   (2004-10-31 14:13) [13]

работал. всех перечислять? ;о)

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

возможно явные потоки вообще не нужны, можно обойтись асинхронным коннектом/запросами (это поток в самом ADO).



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

Форум: "Базы";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
4-1097792009
AKA
2004-10-15 02:13
2004.11.28
Как сделать приложение активным ?!


14-1100079222
VictorT
2004-11-10 12:33
2004.11.28
Кто знает, что за вирус? Как называется?


1-1100637651
Lelik
2004-11-16 23:40
2004.11.28
Открытие файла


4-1097932059
Comp
2004-10-16 17:07
2004.11.28
Owner-Draw Меню


1-1099653949
clampo
2004-11-05 14:25
2004.11.28
Шрифт из папки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский