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;
}