Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Для чего нужен 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)ами эти действия.

Необязательно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо