मैं अपने सी ++ कोड में काम करने के लिए APC प्राप्त करने का प्रयास कर रहा हूं लेकिन मैं असफल हूं। मैं शब्दों के लिए खो गया हूँ। सी # में यह सब ठीक काम करता है (तार्किक रूप से एक ही कोड)। मैं थ्रेड 2 को कॉल 1 में इंजेक्ट करने के लिए चाहता हूं। लेकिन मेरे सी ++ प्रोजेक्ट में यह किसी कारण से निष्पादित नहीं होगा। मैं क्या गलत कर रहा हूं ?असीमित प्रक्रिया कॉल
- धागा 1 (मुख्य थ्रेड)
- धागा 2 (उप धागा, कि एक समारोह निष्पादित करने के लिए मुख्य थ्रेड की जरूरत है)
कोड:
#include "stdio.h"
#include "windows.h"
#define TIME 2500
#define LAST_ERROR printf("last error: %i\r\n", GetLastError());
HANDLE handle1, handle2;
void ThreadInfo(char* prefix = "")
{
printf("%sthread id: %i\r\n", prefix, GetCurrentThreadId());
}
VOID CALLBACK apc(_In_ ULONG_PTR data)
{
ThreadInfo(" -> apc: 2 -> 1: ");
}
void run1()
{
while (true)
{
Sleep(TIME);
ThreadInfo("1: ");
// apc
//QueueUserAPC(apc, handle2, (ULONG_PTR) NULL);
}
}
void run2()
{
while (true)
{
Sleep(TIME);
ThreadInfo("2: ");
// apc
QueueUserAPC(apc, handle1, (ULONG_PTR) NULL);
}
}
void TestThreads()
{
DWORD threadId;
SECURITY_ATTRIBUTES a;
a.nLength = 12;
a.lpSecurityDescriptor = NULL;
a.bInheritHandle = 1;
DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &handle1, 0, true, 2);
LAST_ERROR
handle2 = CreateThread(NULL, 100000, (LPTHREAD_START_ROUTINE)run2, NULL, 0, &threadId);
printf("handles (1, 2): %i, %i\r\n", handle1, handle2);
printf("ids (1, 2): %i, %i\r\n", threadId, GetCurrentThreadId());
printf("--------------------------------\r\n");
run1();
}
int main()
{
TestThreads();
printf("done.");
getchar();
return 0;
}
आप घंटों पहले कहाँ गए हैं? :) मैं ** कभी नहीं सोचा होगा कि यह अनुमान लगाया जा रहा है 'नींद'। – Bitterblue
मैं एस्लीपेक्स था :) आपके रेपो कोड पर मेरी प्रशंसा, इच्छा है कि प्रत्येक SO उपयोगकर्ता उन्हें आपकी मदद करने में आसान बना देगा। –
[इस] के अनुसार (http://stackoverflow.com/a/3783845/1442225) एपीसी कॉल स्वीकार करने के लिए _healthy_ GUI थ्रेड बनाने का कोई तरीका नहीं होगा, है ना? मुझे इसे अब एमएफसी में उपयोग करना है। – Bitterblue