在动态库中可以使用多线程吗?????

ponydph 2009-02-13 05:31:26
如题。我想分离一部分功能出来。是否可以在动态库中建立一个线程。
如果可以,如何创建线程的代码 放到哪里初始化一下。
...全文
624 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
做鸡真好吃 2009-02-15
  • 打赏
  • 举报
回复
可以
scsnsjsl_cs_dn 2009-02-15
  • 打赏
  • 举报
回复
学习,
wwwhhb4001 2009-02-14
  • 打赏
  • 举报
回复

学习
wutaihua 2009-02-14
  • 打赏
  • 举报
回复
学习了
Crob 2009-02-14
  • 打赏
  • 举报
回复
www.codetools.com上有很多优秀的THREAD对象的例子,随便找一个
lwx300 2009-02-14
  • 打赏
  • 举报
回复
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);

DWORD dwThreadId;
HANDLE hThread = ::CreateThread(NULL, 0, QueryProc, 0, 0, &dwThreadId);
caixin99 2009-02-13
  • 打赏
  • 举报
回复
如果应用程序是多线程的,则可以在入口点函数中使用线程本地存储 (TLS) 来分配各个线程专用的内存。下面的代码是一个 DLL 入口点函数的示例。 BOOL APIENTRY DllMain(
  HANDLE hModule, // Handle to DLL module
  DWORD ul_reason_for_call, // Reason for calling function
  LPVOID lpReserved ) // Reserved
  {
  switch ( ul_reason_for_call )
  {
  case DLL_PROCESS_ATTACHED:
  // A process is loading the DLL.
  break;
  case DLL_THREAD_ATTACHED:
  // A process is creating a new thread.
  break;
  case DLL_THREAD_DETACH:
  // A thread exits normally.
  break;
  case DLL_PROCESS_DETACH:
  // A process unloads the DLL.
  break;
  }
  return TRUE;
  }
  当入口点函数返回 FALSE 值时,如果您使用的是加载时动态链接,则应用程序不启动。如果您使用的是运行时动态链接,则只有个别 DLL 不会加载。
  入口点函数只应执行简单的初始化任务,不应调用任何其他 DLL 加载函数或终止函数。例如,在入口点函数中,不应直接或间接调用 LoadLibrary 函数或 LoadLibraryEx 函数。此外,不应在进程终止时调用 FreeLibrary 函数。
  注意:在多线程应用程序中,请确保将对 DLL 全局数据的访问进行同步(线程安全),以避免可能的数据损坏。为此,请使用 TLS 为各个线程提供唯一的数据。
lizhigang34 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ponydph 的回复:]
如何创建线程呢?
HANDLE hThread=CreateThread(NULL,0,QueryProc,0,0,NULL);为什么不能使用了 .提示没有6个参数
该如何调用?
[/Quote]
你的CreateThread函数是API还是CWinThread::CreateThread??
ponydph 2009-02-13
  • 打赏
  • 举报
回复
如何创建线程呢?
HANDLE hThread=CreateThread(NULL,0,QueryProc,0,0,NULL);为什么不能使用了 .提示没有6个参数
该如何调用?
Crob 2009-02-13
  • 打赏
  • 举报
回复
of course 可以
dll也有入口函数,像main或者在VC里叫DllMain,可以在那里创建对象及初始化

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧