Паскаль - Моя программа, казалось, потерпела крах, но все еще ... работает - PullRequest
0 голосов
/ 30 мая 2018

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

В настоящее время бит, который воспроизводит музыку, выглядит следующим образом:

repeat
//Other code that's related to responding to user input
while i < trackCount - 1 do
    begin
        if not MusicPlaying() then
        begin
            PlayMusic(trackName, 1);
            trackNumber := trackNumber + 1;
            i := i + 1;
        end;
    end;
until WindowCloseRequested();

По сути, он говорит: «Пока списокеще не закончено, если музыка не воспроизводится, затем воспроизведите дорожку и увеличьте i, чтобы следующая дорожка могла быть воспроизведена после ее завершения ".По-видимому, это привело к сбою программы или, по крайней мере, к такому выводу.Я не мог взаимодействовать с программой после того, как нажал кнопку воспроизведения, но музыка все еще играла по порядку, что говорило мне, что логика работает отлично.После этого программа вернулась в нормальное состояние, но вернулась в то же состояние, когда я снова попытался воспроизвести список.Означает ли это, что это плохой код, и я должен попытаться придумать другой путь?Или есть что-то, чего я не знал о наличии цикла внутри цикла?

1 Ответ

0 голосов
/ 30 мая 2018

Нет, ваша программа на самом деле не падает, она просто задерживается в цикле while i < trackCount - 1 do.

i изменяется (увеличивается) только тогда, когда MusicPlaying() возвращает false, что, вероятно, происходит толькосначала, а затем после того, как трек закончил играть.Все это время ваша программа попадает в цикл while, просто несколько раз ожидая, пока MusicPlaying() вернет false, и поэтому кажется, что она не отвечает.

Я подозреваю, что цикл repeat..until является основным цикломвашей программы.Если это правда, тогда вы можете просто изменить слово while на if.

repeat
    // Other code that's related to responding to user input
    if i < trackCount - 1 do
    begin
        if not MusicPlaying() then
        begin
            PlayMusic(trackName, 1);
            trackNumber := trackNumber + 1;
            i := i + 1;
        end;
    end;
until WindowCloseRequested();
...