| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 876 人关注过本帖
标题:Netsuite for VFP 1.001
只看楼主 加入收藏
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:567
注 册:2013-5-14
收藏
得分:0 
2023-08-15 21:40
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1712
专家分:3318
注 册:2012-2-29
收藏
得分:0 
谢谢!
2023-08-16 05:33
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:567
注 册:2013-5-14
收藏
得分:0 
*--需要Netsuite.dll V1.003版支持
*--需要Mtcomvfp.dll
*--演示如何暂停,结束一个线程
Clear
_vfp.AutoYield = .F. &&消息列队( 在多线这样处理好一些,受窗体“X"影响 )

Local lcPath

If _vfp.StartMode = 0 Then
   m.lcPath = Justpath( _vfp.ActiveProject.Name  )
Else
   m.lcPath = Justpath( sys(16,0) )
Endif   
Set Default To ( m.lcPath )

*--载入H文件
#INCLUDE Netsuite.H

*--载入一个线程完成/异常类|回调过程类
Set Procedure To mt_events.prg



*--创建一个VFP多线程函数( 或写好一个PRG 函数库 直接调用 )
Local lcthrprgtest ;
    , lcthrfuncfile

m.lcthrprgtest  = Addbs( Getenv("TEMP") ) + Sys(2015) + '.prg'   
m.lcthrfuncfile    = Forceext( m.lcthrprgtest , 'fxp' ) &&线程执行的VFP过程函数*--创建线程函数

Text To m.lcthrFunction Textmerge noShow
    Function test ( cthrId ) && 线程ID号
             Do Win_Api
            *以下参数变量所有载入线程函数中可以访问:
*!*             cCmd                  As String ;&&执行的装载函数命令 入参
*!*             , oThreadedAdapter    As Object ;&&线程适配器对象        入参
*!*             , oMainThread            As Object ;&&主线程对象            入参
*!*          , oThread              As Object ;&&当前线程对象        入参
*!*             , oThreadVFP          As Object ;&&入参-没有值 经过MTComVFP附值线程VFP对象
*!*             , cRetuErrMsg            As String  &&出参-没有值 经过MTComVFP线程函数执行结果返回值     
             i = 1
             Do While ( .T.)
                 If oThreadedAdapter.isStop &&结束线程
                   Exit
                Endif
                *通过winAPI 给予线程交出CPU使用权,一般设计不会将CPU的使用全部由一个线程独占
*!*                    Sleep(500) &&大致意思为 500ms执行一次
                *--该处写线程处理一些事物
                *....
                 i = i + 1
             Enddo

             *--一定要有返回值
             Return Transform(i) + "OK"
    Endfunc
   
Endtext

strtofile( lcthrFunction , m.lcthrprgtest )
Compile ( m.lcthrprgtest )
Erase  ( m.lcthrprgtest )



*--实例化一个线程适配器对象[oThreadedAdapter]
Public oThreadedAdapter
m.oThreadedAdapter = Createobject("Netsuite.MultiThreadedAdapter")

*--绑定一个线程对象完成/异常事件(意思如果线程完成通知当前VFP主线程)
Local loComEvent
m.loComEvent = CREATEOBJECT("COMAdapterEvents")
If !EVENTHANDLER( m.oThreadedAdapter , m.loComEvent ) Then
    Messagebox('绑定一个线程事件类失败!',16, '绑定')
    Return .F.
Endif

Public othread
*--实例化一个线程对象[othread] MTA模式
othread                 = m.oThreadedAdapter.ThreadedAdapter( STA )   
othread.IsBackground = .T.                                      &&后台线程        
othread.Priority     = Normal                                &&优先级                                          
othread.name         = 'test '                                 &&可以给这个线程命名一个名称                                
With m.oThreadedAdapter
    .ProgId   = [mtcomvfp.MultiThread]                         &&这个是用来关联VFP写的COM DLL类名
     *--将代码载入,且执行这个PRG的其中一个方法:
        *注意1.载入的PRG需要COMPILE为FXP(或执行一次系统默认编译)
        *注意2.prg被线程引用后注意修改,编译FXP,一般为等线程结束
        *注意3.prg的方法函数在执行需要返回前一定要加return
        *注意4."test_mtcomvfp_function.fxp"装载时需要注意路径位置
        *注意5.第一次的MTA多线程与后面的执行多线有所不同
   
        
     Text To m.lcCmd Textmerge Noshow Pretext 1+2+4
          set Procedure To <<m.lcthrfuncfile>> Additive  
          Return test ("<<'线程'+Transform( othread.ManagedThreadId )>>" )
     Endtext     
    .Cmd = m.lcCmd                                              &&放在C#多线适配器驱动成多线程
Endwith
?'线程'+ Transform( othread.ManagedThreadId )  + [执行:函数(] + othread.Name +') , 启动...'
othread.Start()

*-在需要的暂停,退出线程地方使用:
*!*    oThreadedAdapter.isStop = .T. &&结束线程
othread.Suspend         &&挂起线程
othread.Resume          &&恢复挂起线程
othread.Abort(.T.)        &&结束线程(与oThreadedAdapter.isStop不一样设计逻辑)



[此贴子已经被作者于2023-8-16 18:57编辑过]

2023-08-16 16:17
快速回复:Netsuite for VFP 1.001
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025677 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved