【发布时间】:2020-08-13 06:56:05
【问题描述】:
是否可以在不使用线程的情况下在 dll 函数中使用无限循环?
这里有一些示例代码:
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) {
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_PIN, (LPCSTR)hModule, &hModule);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)myfunction, 0, NULL, 0); //my current method
myfunction(); //locks the program at runtime if i do it this way (just an example)
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
下面是线程中的函数示例:
void myfunction() {
//begin the infinite loop after 5 seconds
Sleep(5000);
for (;;) //set no condition for breaking the loop
{
Sleep(500); //this keeps the cpu from spiking
//call my functions
function1();
function2();
function3();
function4();
}
}
这段代码运行良好。我只是想知道是否有其他选择。例如:函数可以写入进程的内存吗?或稍后调用,而不是 DLL_PROCESS_ATTACH?
【问题讨论】:
-
这能回答你的问题吗? How to start a thread in DLLMain?
-
如果您从远程进程注入此 DLL,请考虑使用 CreateRemoteThread 来绕过此限制。如果进程自愿加载你的 DLL,让它在你的 DLL 中调用某种
init函数。 -
自愿。我会研究你的建议。
标签: c++ multithreading for-loop dll dllmain