26 Haziran 2009 Arşivi

TThread.WaitFor Bug..

// 26 Haziran 2009 // 7 Yorum » // Delphi

Yakın bir zamanda TThread sınıfına yine işim düşmüştü. Yazacağım bir kod parçasında bir thread’in işinin bitmesini beklemem gerekiyordu. Kodumu bu şekilde geliştirirken Delphi’nin bir bug’una rastladım ve bu hatayı Delphi ürün müdürü Nick Hodges‘a ilettim. Sorunun bir sonraki Delphi sürümünde ortadan kalkacağına inanıyorum.

Kısaca sorunun ne olduğundan bahsettikten sonra, mail yazışmalarımızı ilgilenenler için paylaşacağım. Bildiğiniz gibi TThread sınıfının WaitFor metodu bir thread’in işinin bitmesini beklemek için tasarlanmıştır. Ve görevini layıkı ile yerine getirir. Ancak, eğer thread kendi constructor’ında işi bittikten sonra yok edilsin ayarına set edildi ise o zaman bu bug ile karşılaşacaksınız. Thread’inizin constructor ‘ında FreeOnTerminate := true gibi bir satır kod yazdı iseniz ve thread’inizin bitmesini WaitFor ile bekliyorsanız, thread’inizin bitmesine müteakip hata ile karşılaşacaksınız. Bunun nedeni, Thread sınıfının destructor’ında işletim sistemi tarafından ayrılmış olan thread handle’ının CloseHandle ile serbest bırakılmasına karşılık WaitFor metodu içinde bu handle’ın kullanılmaya çalışılmasıdır. Sizlere bu sorun düzeltilinceye kadarki tavsiyem WaitForSingleObject(myThread.Handle, INFINITE) kodu ile bekleme yapmanızdır.

Delphi ürün müdürü ile yazışmalarımız aşağıdaki gibidir:
(more…)