Главная страница
    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.038 c
3-1099393118
dvl92
2004-11-02 13:58
2004.11.28
Как сделать запрос select используя данные другого Tquery?


14-1099835006
Comp
2004-11-07 16:43
2004.11.28
Какой средой лучше пользоваться, программируя на API ?


6-1095624621
Klopan
2004-09-20 00:10
2004.11.28
Scan of 21, 80 ports


4-1097954652
Вадим_
2004-10-16 23:24
2004.11.28
Подсчет импульсов, приходящих на cом-порт с датчика


3-1099127504
Tolya
2004-10-30 13:11
2004.11.28
Цветные записи в DBGrid





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