Aracılığıyla paylaş


Zaman Uyumlu/Zaman Uyumsuz Model

Telefonların etkileşimli yapısı, TAPI'nin gerçek zamanlı bir işletim ortamı olmasını gerektirir. TAPI işlevlerinin birçoğunun hızlı bir şekilde tamamlanması ve sonuçlarının zaman uyumlu olarak uygulamaya döndürülmesi gerekir. Diğer işlevler (arama gibi) bu kadar hızlı tamamlanamayabilir ve bu nedenle zaman uyumsuz olarak çalışabilir.

Telefon işlemleri zaman uyumlu veya zaman uyumsuz olarak tamamlar. Bu iki model aşağıdaki gibi farklılık gösterir. Zaman uyumlu işlevler çağıranın iş parçacığının işlev çağrısından dönmesine izin verilmeden önce isteğin tamamını yürütür. zaman uyumsuz işlevler istek tamamen yürütülmeden önce döndürülür. Zaman uyumsuz istek daha sonra tamamlandığında, hizmet sağlayıcısı başlatma dizisinin başlarında TAPI'nin başlangıçta sağladığı bir geri çağırma yordamı çağırarak tamamlandığını bildirir.

  • Zaman uyumsuz işlemler, tanımlı türdeki dwRequestID adlı bir parametreye sahiptir DRV_REQUESTID ilk parametresidir. Böyle bir işlem, işlev çağrısı döndürdükten sonra işlevinin bir bölümünü ve bağımsız bir yürütme iş parçacığında işlenmesinin geri kalanını gerçekleştirir. İşlev döndürdüğünde, işlev çağrısında geçirilen negatif bir hata sonucu veya (pozitif) dwRequestID döndürür. Negatif hata sonucu işlemin tamamlandığını (ve başarısız olduğunu) gösterir. Döndürülen pozitif dwRequestID, işlemin bağımsız iş parçacığında devam ettiğini gösterir. Böyle bir durumda hizmet sağlayıcısı sonunda ASYNC_COMPLETION yordamını çağırır ve dwRequestID ve işlemin sonucunu belirtmek için bir sonuç kodu geçirir. Sonuç kodu başarı için sıfır veya aynı (negatif) hata sonuçlarından biridir. Her durumda, hizmet sağlayıcısı hiçbir zaman zaman uyumsuz olarak belirlenmiş bir işlevden dwRequestID dışında sıfır veya herhangi bir pozitif değer döndürmemelidir çünkü bunu yapmak beklenmeyen sonuçlara neden olabilir. Hizmet sağlayıcıları, zaman uyumsuz bir işlevden dönmeden önce giriş verilerini her zaman uygulama belleğinden hizmet sağlayıcısı belleğine kopyalamalıdır.
  • Zaman uyumlu işlemlerin ilk parametresi olarak dwRequestID yoktur. Böyle bir işlem çağıranın yürütme iş parçacığında tüm işlemlerini gerçekleştirir ve döndürdüğünde nihai sonucu döndürür. Sonuç, başarı için sıfır veya hata için negatif bir hata kodudur. Hizmet sağlayıcısı zaman uyumlu işlemler için ASYNC_COMPLETION çağırmaz.

Özgün isteğin ne zaman döndürdüğüne göre "tamamlama" geri çağırmasının zamanlamasını göz önünde bulundurmak ilginçtir. Hizmet sağlayıcısı tarafından aşağıdaki sahte kodda olduğu gibi tipik bir zaman uyumsuz istek uygulanır:

Some_request(Request_ID, ...) {
  check parameters for validity
  check device state for validity
  store Request_ID for Completion Interrupt Handler's use
  manipulate device registers to start physical operation
  return Request_ID  // to indicate asynch operation
}
Operation Completion Interrupt Handler: {
  if operation was successful then
    call "completion" callback passing Request_ID and "success"
  else
    call "completion" callback passing Request_ID and "error num"
  endif
}

İşlem çok hızlı tamamlanırsa (veya özgün istek çok yavaş döndürülürse), fiziksel bir işlem tamamlandığında çalışan kesme işleyicisi, özgün istek uygulamaya veya TAPI'ye dönmeden önce tetiklenebilir. Bu davranışa izin verilir. TAPI, uygulamaya nihai tamamlama bildiriminin özgün istek geri döndükten sonra teslim olmasını garanti eder.

TAPI 2.x: Her işlevin zaman uyumlu veya zaman uyumsuz olarak tamamlanıp tamamlanmadığını belirten listeler TAPI Hızlı İşlev Başvurusu.