马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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新手的经验了, 不知道各种神仙针对多线程有其他什么经验总结的。
|