![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Для чего нужен Sleep?
lamerokvdelphi © (2004-11-21 18:47:00)Вот есть такой код :
ListBox2.Items.Insert(0,' ');
ListBox2.Items.add(' ');
ListBox1.Items.loadfromfile(filename);
ListBox1.Items.delete(0);
Вопрос вот в чем - мне сказали что это правильнее будет писать так :
ListBox2.Items.Insert(0,' ');
ListBox2.Items.add(' ');
sleep(0);
ListBox1.Items.loadfromfile(filename);
sleep(0);
ListBox1.Items.delete(0);
Для чего надо обязательно разделятьsleep(0)ами эти действия. Правда ли что действиеListBox1.Items.delete(0)начнет выполняться еще до того как доработаетListBox1.Items.loadfromfile(filename)?
Yanis (2004-11-21 23:04:00) [1]Удалено модератором
Yanis (2004-11-21 23:02:00) [2]Удалено модератором
Yanis (2004-11-21 23:01:00) [3]> мне сказали что это правильнее будет писать так :
А кто или где тебе такое подсказали?
GuAV (2004-11-21 23:00:00) [4]Piter © (21.11.04 19:11) [5]
как sleep(0) в одном потоке влияет на другой поток.
VOID Sleep(
DWORD dwMilliseconds // sleep time
);
...
dwMilliseconds
...
A value of zero causes the thread to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run.
vertal (2004-11-21 22:56:00) [5]Вот отрывок из win32.hlp по теме PostThreadMessage
The thread to which the message is posted must have created a message queue, or else the call to PostThreadMessage fails. Use one of the following methods to handle this situation:
· Call PostThreadMessage. If it fails, call the Sleep function and call PostThreadMessage again. Repeat until PostThreadMessage succeeds.
В одном приложении у меня был поток, где очередь сообщений точно существовала , так как выбирались и обрабатывались сообщения по GetMessage. И тем не менее с первого раза PostThreadMessage отрабатывала не всегда, а по совету Microsoft пришлось сделать
while not PostThreadMessage(...)do sleep(0);
Это заработало, но я не понимаю, как sleep(0) в одном потоке влияет на другой поток. Может кто-нибудь объяснить мне такое поведение программы?
Piter (2004-11-21 19:11:00) [6]lamerokvdelphi (21.11.04 18:47)
Для чего нужен Sleep?
"The Sleep function suspends the execution of the current thread for a specified interval."
что, нельзя в справке посмотреть?
Для чего надо обязательно разделять sleep(0)ами эти действия
я не знаю
Правда ли что действие ListBox1.Items.delete(0) начнет выполняться еще до того как доработает ListBox1.Items.loadfromfile(filename)?
а что мешает посмотреть код loadfromfile?
procedure TStrings.LoadFromFile(const FileName: string);
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
И побешать по вызовам? Никаких доп. потоков не создается, а значит управление не может вернуться, пока все действия не выполнятся
Xaker (2004-11-21 19:05:00) [7]
sleepнужен, ЧТОБЫ СПАТЬ!!!
Anatoly Podgoretsky (2004-11-21 19:05:00) [8]Тебе немного обманули, а слип нужен что бы кодовый поток заснул на время.
KilkennyCat (2004-11-21 19:03:00) [9]неправда.
begin...end (2004-11-21 19:03:00) [10]
> Для чего надо обязательно разделять sleep(0)ами эти действия.
Необязательно.