Bagaimana untuk memulai aplikasi Win32 dari Visual Basic

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 129797 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Aplikasi Windows yang dapat terdiri dari lebih dari satu proses, dan proses dapat terdiri dari lebih dari satu benang. Aplikasi Microsoft Win32 program antarmuka (API) mendukung multitasking, yang menciptakan efek simultan eksekusi beberapa proses dan benang. Artikel ini menjelaskan proses dan benang, dan menjelaskan cara membuat dan menggunakan mereka dari Microsoft Visual Basic, dengan contoh langkah demi langkah.

INFORMASI LEBIH LANJUT

Proses adalah sebuah program yang dimuat ke memori dan siap untuk eksekusi. Setiap proses memiliki ruang alamat virtual pribadi. Proses terdiri dari kode, data, dan sumber daya sistem lain seperti file, pipa, dan sinkronisasi objek yang dapat diakses untuk benang-benang proses. Setiap proses dimulai dengan satu thread, tapi tambahan independen mengeksekusi benang dapat dibuat.

Thread dapat mengeksekusi setiap bagian dari kode program, termasuk bagian dijalankan oleh thread lain. Thread adalah entitas dasar yang sistem operasi mengalokasikan CPU waktu. Setiap benang mempertahankan seperangkat struktur untuk menyimpan konteks sambil menunggu akan dijadwalkan untuk Waktu pemrosesan. Konteks terlampir thread mesin Register, kernel stack, benang lingkungan blok, dan setumpuk pengguna di ruang alamat proses thread. Semua thread proses berbagi ruang alamat virtual dan dapat mengakses variabel global dan sumber daya sistem dari proses.

Sistem operasi multitasking membagi waktu CPU yang tersedia di antara Thread yang membutuhkannya. Di Windows, Win32 API dirancang untuk pencegahan multitasking; ini berarti bahwa sistem mengalokasikan irisan kecil waktu CPU di antara benang yang saling bersaing. Thread saat ini pelaksana ditangguhkan Ketika waktu iris elapses, memungkinkan thread lain untuk menjalankan. Ketika sistem beralih dari satu benang lain, menghemat konteks ditangguhkan thread dan mengembalikan konteks disimpan thread berikutnya di antrian.

Karena setiap waktu irisan kecil (sekitar 20 milidetik), itu muncul bahwa beberapa benang mengeksekusi pada waktu yang sama. Ini adalah benar-benar terjadi pada sistem multiprosesor di mana benang eksekusi didistribusikan di antara yang tersedia prosesor. Pada prosesor tunggal sistem, bagaimanapun, menggunakan beberapa benang tidak menghasilkan lebih banyak instruksi dieksekusi. Bahkan, sistem dapat memperlambat jika dipaksa untuk melacak benang terlalu banyak.

Bagaimana untuk memulai aplikasi Win32 dari Visual Basic

Ada dua cara untuk memulai aplikasi Win32 lainnya dari Microsoft Visual Basic aplikasi:
  • Gunakan perintah shell Visual Basic. Ini menumbuhkan proses baru dan kembali ID proses nya. Namun, untuk dapat melakukan sesuatu yang berguna, menangani proses diperlukan, yang dapat diperoleh dengan panggilan berikutnya fungsi OpenProcess Win32 API.
  • Menggunakan fungsi CreateProcess Win32 API yang menciptakan kedua proses objek dan objek utama benang. Proses dan benang awal ditugaskan pengenal 32-bit yang tetap berlaku sampai masing-masing objek (proses atau benang) berakhir. Pengenal 32-bit dapat digunakan untuk secara unik mengidentifikasi objek dalam sistem. Proses yang baru dan menangani thread baru juga dibuat dengan hak akses penuh. Semua ini nilai-nilai empat kembali dalam struktur PROCESS_INFORMATION yang dikirimkan dengan referensi ke CreateProcess.
Menangani proses yang dikembalikan oleh salah satu dari dua metode dapat digunakan dengan lain Win32 API seperti TerminateProcess untuk memanipulasi baru meluncurkan aplikasi.

Penting untuk memahami bahwa saat penciptaan, sistem memberi masing-masing objek bangsawan penggunaan awal dari salah satu. Kemudian, sebelum CreateProcess kembali, fungsi membuka proses dan objek benang dan tempat menangani proses-relatif untuk masing-masing di hProcess dan hThread anggota PROCESS_INFORMATION struktur.

Ketika CreateProcess membuka objek ini, menghitung penggunaan untuk masing-masing secara bertahap untuk dua. Ini berarti bahwa sebelum Windows NT atau Windows 2000 eksekutif dapat bebas objek proses, proses harus mengakhiri (decrementing penggunaan menghitung sampai satu) dan proses induk harus menelepon CloseHandle (decrementing penggunaan menghitung sampai nol). Untuk membebaskan objek benang, benang harus mengakhiri dan proses induk harus menutup menangani objek benang.

PERHATIAN: Ini sangat penting untuk menutup menangani ini. Kegagalan untuk melakukannya dapat mengakibatkan kebocoran memori sistem karena beberapa objek Windows NT atau Windows 2000 eksekutif tidak pernah hancur.

Pertimbangan-pertimbangan yang sama diperlukan ketika mendapatkan menangani proses dengan OpenProcess. Dalam kasus ini juga, menghitung penggunaan bertambah satu, dan kecuali pegangan ditutup, objek proses akan tetap di memori bahkan Ketika proses itu sendiri telah dihentikan.

Contoh langkah demi langkah

  1. Memulai sebuah proyek Standard EXE yang baru dalam Visual Basic. Form1 dibuat secara default.
  2. Salin kode berikut ke jendela kode Form1 bentuk:
    Option Explicit
    
          Private Type PROCESS_INFORMATION
             hProcess As Long
             hThread As Long
             dwProcessId As Long
             dwThreadId As Long
          End Type
    
          Private Type STARTUPINFO
             cb As Long
             lpReserved As String
             lpDesktop As String
             lpTitle As String
             dwX As Long
             dwY As Long
             dwXSize As Long
             dwYSize As Long
             dwXCountChars As Long
             dwYCountChars As Long
             dwFillAttribute As Long
             dwFlags As Long
             wShowWindow As Integer
             cbReserved2 As Integer
             lpReserved2 As Long
             hStdInput As Long
             hStdOutput As Long
             hStdError As Long
          End Type
    
          Private Declare Function CreateProcess Lib "kernel32" _
             Alias "CreateProcessA" _
             (ByVal lpApplicationName As String, _
             ByVal lpCommandLine As String, _
             lpProcessAttributes As Any, _
             lpThreadAttributes As Any, _
             ByVal bInheritHandles As Long, _
             ByVal dwCreationFlags As Long, _
             lpEnvironment As Any, _
             ByVal lpCurrentDriectory As String, _
             lpStartupInfo As STARTUPINFO, _
             lpProcessInformation As PROCESS_INFORMATION) As Long
    
          Private Declare Function OpenProcess Lib "kernel32.dll" _
             (ByVal dwAccess As Long, _
             ByVal fInherit As Integer, _
             ByVal hObject As Long) As Long
    
          Private Declare Function TerminateProcess Lib "kernel32" _
             (ByVal hProcess As Long, _
             ByVal uExitCode As Long) As Long
    
          Private Declare Function CloseHandle Lib "kernel32" _
             (ByVal hObject As Long) As Long
    
          Const SYNCHRONIZE = 1048576
          Const NORMAL_PRIORITY_CLASS = &H20&
    
          Private Sub Form_Click()
             Dim pInfo As PROCESS_INFORMATION
             Dim sInfo As STARTUPINFO
             Dim sNull As String
             Dim lSuccess As Long
             Dim lRetValue As Long
    
             sInfo.cb = Len(sInfo)
             lSuccess = CreateProcess(sNull, _
                                     "Calc.exe", _
                                     ByVal 0&, _
                                     ByVal 0&, _
                                     1&, _
                                     NORMAL_PRIORITY_CLASS, _
                                     ByVal 0&, _
                                     sNull, _
                                     sInfo, _
                                     pInfo)
    
             MsgBox "Calculator has been launched!"
    
             lRetValue = TerminateProcess(pInfo.hProcess, 0&)
             lRetValue = CloseHandle(pInfo.hThread)
             lRetValue = CloseHandle(pInfo.hProcess)
    
             MsgBox "Calculator has terminated!"
          End Sub
    
    					
  3. Pada Run menu, pilih Start, atau tekan tombol F5 untuk memulai program. Klik pada Form1 formulir untuk meluncurkan aplikasi Kalkulator. Pesan kotak muncul menunjukkan aplikasi telah meluncurkan berhasil. Klik OK untuk menutup kotak pesan dan aplikasi Kalkulator. Lain kotak pesan muncul menunjukkan aplikasi telah berhasil dihentikan.

REFERENSI

Untuk informasi tambahan, silakan lihat artikel berikut pada Basis Pengetahuan Microsoft:
129796 Bagaimana menggunakan aplikasi 32-Bit untuk menentukan ketika proses dikupas berakhir
176391 Bagaimana pemrograman menutup satu contoh Program berbasis Windows

Properti

ID Artikel: 129797 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
Kata kunci: 
kbapi kbhowto kbmt KB129797 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:129797

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com