递归火山软件开发平台

标题: 求助!!!"启动有状态线程"崩溃 [打印本页]

作者: a949422086    时间: 前天 07:06
标题: 求助!!!"启动有状态线程"崩溃
<火山程序 类型 = "通常" 版本 = 1 />

包 火山.程序

类 启动类 <公开 基础类 = 动态库程序类>
{
    变量 线程状态 <类型 = 线程状态类>

    方法 启动方法 <公开 类型 = 整数>
    {
        启动有状态线程 (线程状态, 线程测试函数, 262144, )
        返回 (1)
    }

    方法 线程测试函数 <静态>
    参数 线程状态对象 <类型 = 线程状态类>
    {
        全局信息框 ("我是线程测试函数", , , )
    }
}



在火山视窗DLL的启动方法里执行 "启动有状态线程" 直接崩溃,改用启动线程就没事。有没有大佬告知下原因

作者: 创世魂    时间: 前天 07:55
线程里面不要弹出信息框。也不要操作任何组件。
作者: a949422086    时间: 前天 08:09
创世魂 发表于 2025-6-25 07:55
线程里面不要弹出信息框。也不要操作任何组件。
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 包 火山.程序

  3. 类 启动类 <公开 基础类 = 动态库程序类>
  4. {
  5.     变量 线程状态 <类型 = 线程状态类>

  6.     方法 启动方法 <公开 类型 = 整数>
  7.     {
  8.         启动有状态线程 (线程状态, 线程测试函数, , )
  9.         返回 (1)
  10.     }

  11.     方法 线程测试函数 <静态>
  12.     参数 线程状态对象 <类型 = 线程状态类>
  13.     {
  14.         // 全局信息框 ("我是线程测试函数", , , )
  15.     }
  16. }
复制代码

线程函数里不写任何代码也会崩溃。
只有在DLL的启动方法里调用"启动有状态线程"才会这样。
如果是EXE就不会,但是DLL启动方法里改成使用"启动线程"又正常了

作者: Xelloss0618    时间: 前天 09:24
测试了一下,并非不能在DLL里使用,而是不能在DLL的启动方法里使用。
可能是启动有状态线程用了些不能在dll入口函数里使用的API吧。
换其他方法吧,这个有状态线程也不好用。建议PIV或仰望模块的“启动静态线程”,传参也更简单。
作者: 793359277    时间: 前天 22:04
DllMain中有诸多限制, "启动有状态线程"创建线程之后,  内部调用了WaitForSingleObject, 导致死锁.
(, 下载次数: 6)

作者: a949422086    时间: 昨天 23:43
793359277 发表于 2025-6-25 22:04
DllMain中有诸多限制, "启动有状态线程"创建线程之后,  内部调用了WaitForSingleObject, 导致死锁.

...

原来如此,谢谢




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4