代码之家  ›  专栏  ›  技术社区  ›  Khang

帕斯卡-我的程序似乎崩溃了,但它仍然在…运行

  •  0
  • Khang  · 技术社区  · 6 年前

    我正在写一个音乐播放器供我评估。现在我要做的是让音轨按顺序播放。

    当前播放音乐的位如下所示:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Tom Brunberg    6 年前

    不,你的程序不是真的崩溃,只是在 while i < trackCount - 1 do 循环。

    i 仅当 MusicPlaying() 返回false,这可能只在一首曲目播放完毕后才发生。在此期间,您的程序一直处于 while 循环只是重复等待 音乐播放() 返回false,因此看起来没有响应。

    我怀疑 repeat..until 循环是程序的主循环。如果这是真的,那么你可以简单地改变这个词 虽然 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();