TC官方合作论坛

 找回密码
 立即注册
查看: 828|回复: 5
打印 上一主题 下一主题

[问题] TC控件操作是否需要同步?

[复制链接]
跳转到指定楼层
楼主
发表于 2012-10-30 02:13:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
目标是这样的:多条线程同时向下拉列表控件添加信息。此时是否需要对控制一个共用操作加入临界区?也不知道是不是代码错误:
界面初始化方法。创建临界区
//初始化,创建临界区
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函数已经做了同步工作?





回复

使用道具 举报

沙发
发表于 2012-10-30 09:17:14 | 只看该作者
等待大神>>>>
回复 支持 反对

使用道具 举报

板凳
发表于 2012-10-30 14:35:46 | 只看该作者
这个还真不清楚

不过你可以加一个临界区..如果加了之后测试没问题..那么答案就明显了....如果还有问题...自己检查代码.
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2012-10-30 16:32:01 | 只看该作者
回复 3楼cylhb的帖子

去掉。临界区。能正常运行!但我不为什么一加临界区。就运行错误退出。
回复 支持 反对

使用道具 举报

5#
发表于 2012-10-30 17:13:03 | 只看该作者
你临界区写法有问题吧...
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2012-10-30 18:46:04 | 只看该作者
回复 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

就这几句代码呀!!!应该没错!
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-10-9 10:55 , Processed in 0.154454 second(s), 24 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表