C++ 如何允许控制台程序从回调函数接受数据

C++ 如何允许控制台程序从回调函数接受数据,c++,console,C++,Console,我想我的想法是对的,如果我有一个像这样的程序,它可以设置一个回调函数 void MyCallbackFunction(char* data) { cout << "some data arrived: " << data << endl; } int main(){ //sets up callback SetDispatchFunction(&MyCallbackFunction)); while(1==1) { sleep

我想我的想法是对的,如果我有一个像这样的程序,它可以设置一个回调函数

void MyCallbackFunction(char* data) {
cout << "some data arrived: " << data << endl;
}

int main(){
   //sets up callback
   SetDispatchFunction(&MyCallbackFunction));

   while(1==1) {
  sleep(1000);
   }

   return 0;
}
void MyCallbackFunction(char*data){

cout回调函数通常在您注册的实体生成的线程中被调用,您将需要某种信号机制,通过这种机制,您可以让主线程知道回调。建议不要在线程中执行处理,而应该切换上下文并在on中执行处理他们自己的线程

只是考虑一个例子:
消息队列上的主线程块(或定期检查),等待读取消息,并在回调函数中向该消息队列发布消息

您还可以使用全局同步保护来实现类似的功能,而无需消息队列


但是,如果您的程序严格是单线程的,那么在某个时间点,
while
循环将被中断,回调函数将被执行,您可以在其中设置一个全局变量,当它被中断时,while可以检查该变量。当然,需要同步。

回调函数通常在您注册的实体生成的线程中被调用,您将需要某种信号机制,通过这种机制,您可以使主线程意识到回调。建议不要在线程中执行处理,而应该切换上下文并在自己的线程中执行处理

只是考虑一个例子:
消息队列上的主线程块(或定期检查),等待读取消息,并在回调函数中向该消息队列发布消息

您还可以使用全局同步保护来实现类似的功能,而无需消息队列


但是,如果您的程序是严格单线程的,那么在某个时间点,
while
循环将被中断,回调函数将被执行,您可以在其中设置一个全局变量,当它被中断时,while可以检查该变量。当然,需要同步。

什么是
setdispatch函数
?什么是
SetDispatchFunction
?我正在寻找一个轻量级的解决方案。例如,我如何使用计时器实现相同的功能?我正在寻找一个轻量级的解决方案。例如,我如何使用计时器实现相同的功能?
#include <iostream>

using namespace std;

#define WIN32_LEAN_AND_MEAN
#include <windows.h>


BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
   char szText[100] = {0};
   GetWindowText(hwndChild, szText, 100);
   if (lstrlen(szText) < 1) return true;

   cout << "Window text: " << szText << endl;

   return TRUE;
}

int main(int argc, char* argv[])
{
   //latch onto Google Chrome if running
   HWND windowHandle = FindWindow("Chrome_WidgetWin_0", 0);

   if(windowHandle)
      EnumChildWindows(windowHandle, EnumChildProc, 0);


   //loop so program doesn't stop
   while(1==1) {
      Sleep(2000);
   }

   return 0;
}