Ignore:
Timestamp:
Apr 6, 2001, 4:36:43 PM (24 years ago)
Author:
sandervl
Message:

cleanup daudio thread properly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/winmm/waveoutdaud.cpp

    r5376 r5487  
    1 /* $Id: waveoutdaud.cpp,v 1.3 2001-03-25 21:53:05 sandervl Exp $ */
     1/* $Id: waveoutdaud.cpp,v 1.4 2001-04-06 14:36:43 sandervl Exp $ */
    22
    33/*
     
    5353    fUnderrun = FALSE;
    5454    hSem      = 0;
    55     setVolume(volume);
    5655
    5756    rc = DosOpen("DAUDIO1$", &hDAudioDrv, &action, 0,
     
    102101    hThread = CreateThread(NULL, 0x4000, (LPTHREAD_START_ROUTINE)DAudioThreadHandler,
    103102                           (LPVOID)this, 0, &dwThreadID);
     103
     104    setVolume(volume);
    104105
    105106    if(!ulError)
     
    126127    }
    127128    if(hSem) {
     129        DosPostEventSem(hSem);
    128130        DosCloseEventSem(hSem);
    129131    }
     
    394396//      always notify the win32 app for each buffer that was processed)
    395397/******************************************************************************/
    396 void DAudioWaveOut::handler()
     398BOOL DAudioWaveOut::handler()
    397399{
    398400 LPWAVEHDR whdr = wavehdr;
    399401
    400402    dprintf2(("WINMM: handler buf %X done (play %d/%d, cop %d, ret %d)", whdr, bytesPlayed, getPosition(), bytesCopied, bytesReturned));
     403
     404    if(State != STATE_PLAYING || whdr == NULL)
     405        return FALSE;
    401406
    402407    wmutex.enter();
     
    412417
    413418    callback(WOM_DONE, (ULONG)whdr, 0);
     419    return TRUE;
    414420}
    415421/******************************************************************************/
     
    420426 ULONG  postcnt;
    421427 HEV    hSem;
     428 BOOL   fResult = TRUE;
    422429
    423430    DAudioWaveOut *dwave = (DAudioWaveOut *)pUserData;
     
    445452            return 0;
    446453        }
     454        if(WaveOut::find(dwave) == FALSE) {
     455            dprintf(("DAudioThreadHandler: can't find waveout stream %x", pUserData));
     456            break;
     457        }
    447458        for(int i=0;i<postcnt;i++) {
    448             dwave->handler();
    449         }
    450     }
    451 
    452 }
    453 /******************************************************************************/
    454 /******************************************************************************/
    455 
     459            fResult = dwave->handler();
     460            if(fResult == FALSE) {
     461                break;
     462            }
     463        }
     464        if(fResult == FALSE) {
     465            dprintf(("DAudioThreadHandler: finished waveout stream %x", pUserData));
     466            break;
     467        }
     468    }
     469    return 0;
     470}
     471/******************************************************************************/
     472/******************************************************************************/
     473
Note: See TracChangeset for help on using the changeset viewer.