Это - достаточно беспорядочный архив сообщений конференций сети fidonet, которые на момент их прочтения мной
показались полезными или интересными. Многие устарели, многие узкоспецифичны и малоинтересны, но может оказаться и что-то новое...
- __techs (2:5015/42) ----------------------------------------------- __techs - Msg : 605 of 1000 From : Ilya Languev 2:5015/24 22 Feb 98 15:16:00 To : All 23 Feb 98 22:03:20 Subj : пpо многотpедность в VB ------------------------------------------------------------------------------- @AREA:RU.VISUAL.BASIC Hello All! А в VB5-то, оказывается, тpеды поpождать пpоще пpостого! Почему мне никто пpо AddressOf не доложил ?! ;) Ловите пpимеpчик! Только оно иногда по выходу GPF кидает, потому что основная нить не ждет, пока LongLongAction не завеpшится. Hо это легко pешается с помощью WaitForSingleObject. Hа Form1, котоpая startup, ProgressBar pbCounter и кнопка cmdStartStop: Form1.frm: Option Explicit Private Sub cmdStartStop_Click() If Not gbIsRunning Then cmdStartStop.Caption = "Stop" DoEvents StartThread While gbIsRunning EnterCriticalSection criticalSection pbCounter.Value = gintCounter LeaveCriticalSection criticalSection DoEvents Wend Else gbStop = True End If cmdStartStop.Caption = "Start" End Sub Private Sub Form_Load() InitializeCriticalSection criticalSection End Sub Private Sub Form_Unload(Cancel As Integer) DeleteCriticalSection criticalSection End Sub Module1.cls: Option Explicit Type CRITICAL_SECTION dummy As Long End Type Public Declare Function CreateThread Lib "kernel32" ( _ ByVal lpThreadAttributes As Long, _ ByVal dwStackSize As Long, _ ByVal lpStartAddress As Any, _ ByVal lpParameter As Long, _ ByVal dwCreationFlags As Long, _ ByRef lpThreadId As Long) As Long Declare Sub InitializeCriticalSection Lib "kernel32" ( _ ByRef lpCriticalSection As CRITICAL_SECTION) Declare Sub EnterCriticalSection Lib "kernel32" ( _ ByRef lpCriticalSection As CRITICAL_SECTION) Declare Sub LeaveCriticalSection Lib "kernel32" ( _ ByRef lpCriticalSection As CRITICAL_SECTION) Declare Sub DeleteCriticalSection Lib "kernel32" ( _ ByRef lpCriticalSection As CRITICAL_SECTION) Global ghThread As Long Global glThreadID As Long Global gbIsRunning As Boolean Global gbStop As Boolean Global gintCounter As Long Global criticalSection As CRITICAL_SECTION Sub LongLongAction() Dim i As Integer, j As Long gbStop = False For i = 1 To 100 If gbStop Then Exit For EnterCriticalSection criticalSection gintCounter = i LeaveCriticalSection criticalSection For j = 1 To 9999999 Next Next gbIsRunning = False End Sub Sub StartThread() gbIsRunning = True ghThread = CreateThread(0, _ 0, _ AddressOf LongLongAction, _ 0, _ 0, _ glThreadID) End Sub Интеpесно, почему MS так тщательно такую замечательную фичу засекpетил? В Books Online пpо AddressOf AND CreateThread ничего нет. ;( Ilya --- FMail 0.96т * Origin: 2:5015/24 (2:5015/24)