TC官方合作论坛

标题: TC控件操作是否需要同步? [打印本页]

作者: B哥    时间: 2012-10-30 02:13
标题: TC控件操作是否需要同步?
目标是这样的:多条线程同时向下拉列表控件添加信息。此时是否需要对控制一个共用操作加入临界区?也不知道是不是代码错误:
界面初始化方法。创建临界区
//初始化,创建临界区
function bool init()
    LogManager.setRuntimeInforCritical(thread.createcritical())
    return true
endfunction


主文件中开启线程
LogManager.printRuntimeInfo("系统开始运行...")
ThreadManager.setRoleOperationThread(thread.beginthread("ThreadManager.doRoleOperationThread","")) //开启线程,我本想把下拉列表句柄传入每个线程,进行调用。可我不知道怎么获取TC控制的句柄!!!
ThreadManager.setDeathThread(thread.beginthread("ThreadManager.checkDeathThread",""))
ThreadManager.setVerificationCodeThread(thread.beginthread("ThreadManager.checkVerificationCodeThread",""))

线程文件中添加运行信息 ThreadManager.t
//角色操作线程
function int doRoleOperationThread()
    LogManager.printRuntimeInfo("角色操作线程正在运行...")
    return 0
endfunction

//死亡检测线程
function int checkDeathThread()
     LogManager.printRuntimeInfo("正在测试角色是否死亡...")
    return 0
endfunction

//验证码线程
function int checkVerificationCodeThread()
    LogManager.printRuntimeInfo("正在测试是否有验证码...")
    return 0
endfunction

日志信息文件   LogManager.t
//输出运行信息
function int printRuntimeInfo(string info)            
      thread.entercritical(runtimeInforCritical)
      list.addstring("log",system.getsystime(0)+":  "+info)   //log 是下拉列表控制名
      thread.deletecritical(runtimeInforCritical)
      return 0
endfunction

运行以后的结果是:日志输出信息list.addstring  加入临界区。在程序运行以后。子线程调用输出信息时,程序直接挂掉,退出。
没有被加入临界区时,一切正常。但我想问是,如果多条子线程同时掉用输出日志信息时,输出日志是否要加入临界区?还是TC控制内部的list.addstring函数已经做了同步工作?






作者: lzq5628989    时间: 2012-10-30 09:17
等待大神>>>>
作者: cylhb    时间: 2012-10-30 14:35
这个还真不清楚

不过你可以加一个临界区..如果加了之后测试没问题..那么答案就明显了....如果还有问题...自己检查代码.
作者: B哥    时间: 2012-10-30 16:32
回复 3楼cylhb的帖子

去掉。临界区。能正常运行!但我不为什么一加临界区。就运行错误退出。
作者: cylhb    时间: 2012-10-30 17:13
你临界区写法有问题吧...
作者: B哥    时间: 2012-10-30 18:46
回复 5楼cylhb的帖子

//初始化,创建临界区
function bool init()
    LogManager.setRuntimeInforCritical(thread.createcritical())
    return true
endfunction

LogManager.t
namespace LogManager
//运行信息临界区
int runtimeInforCritical
// 传值
function int setRuntimeInforCritical(int p)
     runtimeInforCritical = p
     return 0
endfunction

//输出运行信息
function int printRuntimeInfo(string info)
     thread.entercritical(runtimeInforCritical)
      list.addstring("log",system.getsystime(0)+":  "+info)
      thread.deletecritical(runtimeInforCritical)
      return 0
endfunction

就这几句代码呀!!!应该没错!




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1