鱼C论坛

 找回密码
 立即注册
查看: 2944|回复: 6

动态链接库中创建线程失败

[复制链接]
发表于 2016-11-4 21:14:28 | 显示全部楼层 |阅读模式
15鱼币
本人菜菜鸟,想在动态链接库中创建线程,发现失败了。
请各位帮帮忙。。

  1. unsigned int __stdcall MyFunc(void *pParam)
  2. {
  3.     MessageBox(NULL, TEXT("启动线程成功!"), TEXT("提示"), MB_OK);
  4.     return 0;
  5. }

  6. BOOL APIENTRY DllMain( HMODULE hModule,
  7.                        DWORD  ul_reason_for_call,
  8.                        LPVOID lpReserved
  9.                      )
  10. {


  11.     switch (ul_reason_for_call)
  12.     {
  13.     case DLL_PROCESS_ATTACH:
  14.         _beginthreadex(NULL, 0, MyFunc, NULL, 0, NULL);
  15.         MessageBox(NULL, TEXT("成功载入动态链接库"), TEXT("提示"), MB_OK);
  16.         break;

  17.     case DLL_THREAD_ATTACH:
  18.     case DLL_THREAD_DETACH:

  19.         break;

  20.     case DLL_PROCESS_DETACH:
  21.         MessageBox(NULL, TEXT("成功卸载动态链接库"), TEXT("提示"), MB_OK);
  22.         break;
  23.     }
  24.     Sleep(1);
  25.     return TRUE;
  26. }
复制代码

最佳答案

查看完整内容

我对这个最熟悉了,居然没召唤我~@拈花小仙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-4 21:14:29 | 显示全部楼层
本帖最后由 无符号整形 于 2016-11-5 08:37 编辑


我对这个最熟悉了,居然没召唤我~@拈花小仙
  1. #include <Windows.h>

  2. HINSTANCE g_hModule;

  3. DWORD WINAPI MyFunc(LPVOID pParam)
  4. {
  5.         MessageBox(NULL, TEXT("启动线程成功!"), TEXT("提示"), MB_OK);
  6.         Sleep(2000);
  7.         return 0;
  8. }

  9. BOOL APIENTRY DllMain(HMODULE hModule,
  10.         DWORD  ul_reason_for_call,
  11.         LPVOID lpReserved
  12.         )
  13. {

  14.         DWORD ThreadID;
  15.         switch (ul_reason_for_call)
  16.         {
  17.         case DLL_PROCESS_ATTACH:
  18.                 g_hModule = hModule;
  19.                 if (CreateThread(NULL, 0, MyFunc, NULL, 0, &ThreadID) == NULL)
  20.                 {
  21.                         MessageBox(NULL, TEXT("Error"), TEXT("提示"), MB_OK);
  22.                 }
  23.                 MessageBox(NULL, TEXT("成功载入动态链接库"), TEXT("提示"), MB_OK);
  24.                 break;

  25.         case DLL_THREAD_ATTACH:
  26.                 MessageBox(NULL, TEXT("成功创建线程。"), TEXT("提示"), MB_OK);
  27.                 break;
  28.         case DLL_THREAD_DETACH:
  29.                 MessageBox(NULL, TEXT("线程退出。"), TEXT("提示"), MB_OK);
  30.                 break;

  31.         case DLL_PROCESS_DETACH:
  32.                 MessageBox(NULL, TEXT("成功卸载动态链接库"), TEXT("提示"), MB_OK);
  33.                 break;
  34.         }
  35.         return TRUE;
  36. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-4 21:15:33 | 显示全部楼层
美女求帮忙 @拈花小仙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-5 07:52:32 | 显示全部楼层
最后是不是应该return 0;吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-5 08:31:33 | 显示全部楼层
alltolove 发表于 2016-11-5 07:52
最后是不是应该return 0;吧

啥意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-5 09:03:43 | 显示全部楼层
本帖最后由 my_angel 于 2016-11-5 09:10 编辑
无符号整形 发表于 2016-11-5 08:34
我对这个最熟悉了,居然没召唤我~@拈花小仙
  1. #include <process.h>
  2. #include <stdio.h>
  3. #include <Windows.h>

  4. unsigned int __stdcall MyFunc(void *arg)
  5. {
  6.     printf("+++++启动线程成功!++++\n");
  7.     MessageBox(NULL, TEXT("启动线程成功!"), TEXT("提示"), MB_OK);
  8.     return 0;
  9. }

  10. BOOL APIENTRY DllMain( HMODULE hModule,
  11.                        DWORD  ul_reason_for_call,
  12.                        LPVOID lpReserved
  13.                      )
  14. {
  15.     switch(ul_reason_for_call)
  16.     {
  17.     case DLL_PROCESS_ATTACH:
  18.         printf("===== 加载动态链接库,并创建子线程 =====\n");
  19.         _beginthreadex(NULL, 0, MyFunc, NULL, 0, NULL);
  20.         break;

  21.     case DLL_PROCESS_DETACH:
  22.         printf("===== 卸载动态链接库 =====\n");
  23.         break;
  24.     case DLL_THREAD_ATTACH:
  25.         printf("===== DLL_THREAD_ATTACH 被触发 =====\n");
  26.         break;
  27.     case DLL_THREAD_DETACH:
  28.         printf("===== DLL_THREAD_DETACH 被触发 =====\n");
  29.         break;
  30.     }
  31.     return true;
  32. }
复制代码


把代码这样写就正常了,但是把子线程执行到MessageBox好像停住了,DLL_THREAD_DETACH也没有被触法,究竟啥回事,知道吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-5 09:46:08 | 显示全部楼层
无符号整形 发表于 2016-11-5 08:34
我对这个最熟悉了,居然没召唤我~@拈花小仙

发现问题了, 原来是主线程关闭了,导致进程关闭,子线程还没执行完就被迫结束。

犯傻了。。。

分就给你了,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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