The Pragmatic Programmer

Tulisan iseng kalo ada waktu.
See also: Other Geeks@INDC

Matiin thread kok lama banget yah?

Jadi begini....
 
Program gw create 1 thread untuk copy tabel-tabel yg ada di database MS Access ke database VistaDB. Jadi untuk setiap tabel mempunya subroutine masing-masing yg di dalamnya berisi sebuah loop yang akan mengkopi semua row yg ada di tabel Access ke tabel di VistaDB. Pada loop tersebut gw tambahin flag untuk memeriksa apakah user menekan tombol “Cancel” ato tidak, jadi bila tombol “Cancel” ditekan maka flagnya diset true sehingga thread akan keluar dari looping dan masa hidupnya pun selesai.
 
Sebagai informasi, driver VistaDB dibuat dengan menggunakan COM.
 
Yang jadi masalah adalah, kenapa ketika tombol “Cancel” ditekan kok butuh waktu yang lumayan lama (kira-kira 1 menit) dibutuhkan sampai worker thread tersebut mati? Gw dah coba manggil Thread.Join()--tanpa specify milliseconds timeout-nya, Thread.Abort(), juga hanya set flag ke true saja.
 
Ada yg punya pengalaman?
Share this post: | | | |

Comments

irwansyah said:

bos, itu ada kesalahan dibagian looping. Mestinya dibagian looping "diberi jatah" untuk waiting signal kalau2x ada proses canceling;)...ini banyak dilakukan di aplikasi seperti copy, delete, atau processing yg lain
# July 25, 2006 8:25 PM

irwansyah said:

Maksudnya di loopnya juga nge-cek satu flag untuk melihat apakah thread di signal untuk mati ato gak gitu yah?? Kalo yg dimaksud itu sih dah gw lakuin tuh tapi masih tetap lama juga...:(...sekitar 1 menitan deh untuk nungguin threadnya selesai.
# July 25, 2006 8:55 PM

irwansyah said:

Yah, akhirnya gw tau penyebabnya!!!

Karena di finally section gw kasih code untuk create index di tabel.

Case Closed!!!
# July 29, 2006 2:04 AM