Многопоточное сохранение файлов в PB

Раздел посвящен программированию с использованием Power Basic.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Многопоточное сохранение файлов в PB

Сообщение jangle » 26.01.2012 (Чт) 16:57

Кто нибудь писал многопоточные приложения на PB? Как сделать сохранение файла в отдельном потоке, чтобы не грузить основной поток приложения?

HouseMD
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 22.09.2011 (Чт) 19:06

Re: Многопоточное сохранение файлов в PB

Сообщение HouseMD » 27.01.2012 (Пт) 1:00

если я правильно понял вопрос - то в пб есть встроенная функция THREAD CREATE

приблизительно так. на достоверность не претендую.
#COMPILE EXE
#DIM ALL

GLOBAL hThread AS LONG
THREAD FUNCTION mThread_Start(BYVAL mWnd AS DWORD) AS LONG
LOCAL lResult AS LONG
SLEEP 3000
MSGBOX "Привет из потока"
THREAD CLOSE hThread TO lResult
END FUNCTION

FUNCTION PBMAIN () AS LONG
THREAD CREATE mThread_Start(0) TO hThread
SLEEP 3000
MSGBOX "Привет"
SLEEP 5000
END FUNCTION



забыл уточнить - для одного дополнительного потока этот код вполне приемлем (типа чтоб окно не зависало и т.п.), для многопоточности нужно гуглить про синхронизацию.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Многопоточное сохранение файлов в PB

Сообщение jangle » 27.01.2012 (Пт) 12:18

HouseMD писал(а):если я правильно понял вопрос - то в пб есть встроенная функция THREAD CREATE


Спасибо, написал на основе твоего вот такой код:

Код: Выделить всё
#Compile DLL
#Dim All
#Include Once "Win32API.inc"

Global ghInstance As Dword
Global hThread As Dword
Global gFileName      As String
Global gFileContent   As String
Global gCallBackFunct As Dword
Declare Function SaveFileThread Alias "SaveFileThread" (ByVal FileName As String, ByVal FileContent As String, ByVal CallBackFunct As Dword) As Dword
Declare Thread Function mThread_Save(ByVal mWnd As Dword) As Dword
Declare Sub CallBackProc()

'-------------------------------------------------------------------------------
' Main DLL entry point called by Windows...
'
Function LibMain (ByVal hInstance   As Long, _
                  ByVal fwdReason   As Long, _
                  ByVal lpvReserved As Long) As Long
  Select Case fwdReason
    Case %DLL_PROCESS_ATTACH
        ghInstance = hInstance
        Function = 1   'success!
    Case %DLL_PROCESS_DETACH
        Function = 1   'success!
    Case %DLL_THREAD_ATTACH
        Function = 1   'success!
    Case %DLL_THREAD_DETACH
        Function = 1   'success!
    End Select
End Function
'-------------------------------------------------------------------------------

Thread Function mThread_Save(ByVal mWnd As Dword) As Dword
    Local lResult As Dword
    Local f As Dword
    f=FreeFile
    Open gFileName For Binary  As f
     Put$ f,gFileContent
    Close f
    gFileContent=""
    Thread Close hThread To lResult
    Call Dword gCallBackFunct Using  CallBackProc 'Вызов функции в VB коде для оповещении о конце записи файла
End Function



Function SaveFileThread Alias "SaveFileThread" (ByVal FileName As String, ByVal FileContent As String, ByVal CallBackFunct As Dword) Export As Dword
    gFileName=FileName
    gFileContent=FileContent
    gCallBackFunct=CallBackFunct
    Thread Create mThread_Save(0) To hThread
    FileContent=""
End Function



Однако происходит краш после сохранения файла. Если кто знает причину, просьба помочь в этом треде: viewtopic.php?f=51&t=43724&p=6760422#p6760422


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList