C++ c++;不使用线程的dll无限循环
是否可以在不使用线程的情况下在dll函数中使用无限循环 下面是一些示例代码:C++ c++;不使用线程的dll无限循环,c++,multithreading,for-loop,dll,dllmain,C++,Multithreading,For Loop,Dll,Dllmain,是否可以在不使用线程的情况下在dll函数中使用无限循环 下面是一些示例代码: BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hModule); GetModuleHandleExA(GET_MODUL
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_进程_附加?第一期 这是未定义的行为:
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)myfunction, 0, NULL, 0);
您正在强制转换myFunction
的函数签名这一事实可能会损坏堆栈
将myFunction的签名更改如下:
DWORD __stdcall myfunction(void*) {
当您可以从CreateThread中删除可疑的强制转换时,您知道您做对了:
CreateThread(NULL, 0, myfunction, 0, NULL, 0);
第二期
首先,您不应该在DLL\u进程\u ATTACH中做任何有意义的事情。根据雷蒙德的说法,.这能回答你的问题吗?如果您正在从远程进程中注入此DLL,请考虑使用以绕过此限制。如果进程是自愿加载DLL,则让它在DLL中调用某种类型的
init
函数。我会研究你的建议。如果你真的仔细阅读了Raymond所说的,并且在DllMain
中调用CreateThread
,只要你不在新线程上同步就可以了。不建议创建线程,但也不禁止创建线程。只要把线踢开,继续前进就可以了。