我想在dll中同時在後臺運行兩個函數,所以我在dllmain中做了CreateThread
但它不起作用。任何提示或幫助?dll中的多線程
#include <Windows.h>
#include "main.h"
#include <iostream>
void main()
{
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "Press enter?";
while (true) {
if (GetAsyncKeyState(0x0D))
Trainer(); Sleep(50);
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD Reason, LPVOID Reserved) {
switch (Reason) {
case DLL_PROCESS_ATTACH:
MessageBox(0, "DllInject", "Injected", 0);
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)main, NULL, 0, NULL);
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
功能例如
void artemis()
{
while (true)
{
Sleep(300);
ammoArtemis = 1;
}
}
不要在'DllMain'中創建線程(或者做任何實質性的事情)。這是一個僵局的保證。從[文檔](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx):*「由於DLL通知已序列化,入口點函數不應嘗試與其他線程或進程,因此可能會發生死鎖。「*另請參見:[某些原因在您的DllMain中不要做任何可怕的事情](https://blogs.msdn.microsoft.com/oldnewthing/20040127-00/?)p = 40873 –
會發生什麼,你期望發生什麼? –
我應該在哪裏創建一個呢?謝謝。 – user6632482