TC官方合作论坛
标题:
TC多线程的一些总结!透过现象看本质!
[打印本页]
作者:
topses
时间:
2018-1-21 20:21
标题:
TC多线程的一些总结!透过现象看本质!
TC线程函数对应windows API
1,TC的sleep函数由sleep和MsgWaitForMultipleObjects构成。一个是阻塞消息一般用于子线程,一个不阻塞消息一般用于主线程UI。
2,线程暂停》SuspendThread, 线程恢复》ResumeThread,
线程等待》
WaitForSingleObject
概念
1, TC中线程函数操作的线程都是线程句柄,不是线程ID。TC的帮助文档有些混淆,有时用ID,有时用句柄,这是两个不同概念,还是建议统一用句柄handle。
如threadclose(id,type),而threadgetstatus(handle)
线程句柄是通过“线程打开”函数返回的,当然子线程自己的句柄也可通过下面函数获得
dwThreadId=线程获取id()
function OpenThread(dwDesiredAccess = #3ff, bInheritHandle = false, dwThreadId = 0)
//HANDLE WINAPI OpenThread(
// _In_ DWORD dwDesiredAccess, //线程对象的访问权限; THREAD_ALL_ACCESS = #3FF
// _In_ BOOL bInheritHandle, //True: 这个进程将继承该句柄的进程。否则,进程不继承此句柄。
// _In_ DWORD dwThreadId //要打开的线程标识符
//);
return dllcall("kernel32.dll", "long", "OpenThread", "long", dwDesiredAccess, "long", bInheritHandle, "long", dwThreadId)
end
复制代码
多条子线程同步注意重点:
1,子线程中TC的sleep函数会引发系统
让出控制权,
给其他相同优先级的就绪状态的线程
(当前代码暂停执行,去执行其他子线程代码)。
2,鼠标与键盘函数(包括超级键盘)同样会
引发系统
让出控制权,给其他线程(当前代码暂停执行,去执行其他子线程代码)。
3,临界区和线程等待应该是个不错结合。
4, 临界区的进入与离开之间不要发生跳转,如在中间插入了break和continue或其它流程控制语句,否则子线程很容易不可控,发生假死
5,事件没发现什么。。。待总结
sleep和鼠标、键盘函数这个用得多,多线程中会转换控制权这是重点,别被他们坑了。
以上就是我这TC新手的经验了, 不知道各种神仙针对多线程有其他什么经验总结的。
作者:
hao1210119
时间:
2018-1-22 11:25
谢谢提供指导!
作者:
剑仙十号
时间:
2018-1-22 16:11
认同。TC的线程句柄,线程ID,确实混。
线程开启 函数,建议TC统一改为线程句柄。
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1