gpt4 book ai didi

c++ - 在 C++ 中是否可以从在辅助线程中运行的函数在主线程中执行函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:53 25 4
gpt4 key购买 nike

例如,我有一个主线程,创建了很多类等。我有一个网络部分,在单独的线程中等待客户端数据。这个“服务员”应该运行在主线程中创建的类中的一些函数,并且这些函数应该在主线程中执行。

我怎么能这样做?如果我以这种方式从服务员调用所需的方法 SomeClass::SomeMethod(some_args);,当然,它们在辅助线程中执行。

如果有这样的东西就好了:SomeClass::Invoke(function_pointer); 那么,function_pointer 指向的函数会在主线程中执行吗?我需要有关 Windows 操作系统的建议。

最佳答案

如果这是 Windows Win32 应用程序,那么使用应用程序的消息处理队列是一种常见的方法。在应用程序的主窗口中等待自定义用户消息,通常是这样的:

(in header file)
#define WM_MYCUSTOMMESSAGE (WM_USER + 1)

(WndProc for you main window)
LRESULT WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_MYCUSTOMMESSAGE:
... Process something
break;
}
}

(On seconday thread)
SendMessage(hWnd, WM_MYCUSOMMESSAGE, wParam, lParam); // Send and wait for the result

PostMessage(hWnd, WM_MYCUSTOMMESSAGE, wParam, lParam); // Send the message and continue this thread.

[编辑]对于控制台应用程序,请尝试使用 Windows 事件。因此,使用以下方法创建一个命名事件:

(On primary thread)
HANDLE myEvent = CreateEvent(NULL, FALSE, FALSE, "MyEvent");

... later as part of a message processing loop
while(true)
{
WaitForSingleObject( myEvent, 0 ); // Block until event is triggers in secondary thread

... process messages here
... I recommend storing "messages" in a synchronized queue
}

(On secondary thread)
SetEvent(myEvent); // Triggers the event on the main thread.

关于c++ - 在 C++ 中是否可以从在辅助线程中运行的函数在主线程中执行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com