Closed. This question is
opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便
editing this post用事实和引用来回答。
4年前关闭。
Improve this question
具有WinAPI良好经验的人能否通过行为如下的应用程序指导我正确的方向:
用户启动一个应用程序(带有入口点winmain的win32)。应用程序连接到数据库,选择数据,进行一些内部计算,如果一切正常,则启动新应用程序并退出。如果没有成功,则阻塞(可能需要很长时间才能执行,但类似于服务)没有成功。
如果存在问题(错误的连接字符串,无效的数据等),该应用程序将创建一个包含多个控件的窗口,并允许用户修复其所能解决的问题。
如果连接字符串和数据有效,但是无法启动该应用程序,则不会显示上一个窗口,而是会创建另一个窗口以及其他控件集,用户必须先执行其他操作才能继续。
因此,处理此类要求的最干净方法是什么。
到目前为止,我可以想象以下方法:
1)创建一个消息循环,并发布一个WM_CUSTOM_INIT,这将导致尝试进行初始数据检索,然后,以不同状态发布回线程消息。
2)像在控制台应用程序中一样执行所有操作,首先,调用数据库,然后,如果出现问题,请创建一个消息循环和窗口。退出窗口,退出消息循环,如果不起作用,则创建另一个窗口和另一个消息循环。
让我感到困扰的是由于CoInitialize(NULL),数据库应用程序将创建的隐藏消息循环。还有PostThreadMessage,如果某些dll决定抛出一个表示某些内容的MessageBox,则可能会失败。同样,在第一种方法中,我将阻止较长的调用,如果它决定枚举窗口或使用SendMessage/SendMessageTimeout(WM_GETTITLEORSOMETHING)进行某些操作,则可能会锁定其他应用程序。同样,焦点可能是第二种情况下的问题,因为该应用程序将在开始时释放前台特权,然后它将无法再次作为前台唤醒。
总体而言,这似乎有些困惑,而且我对它的思考越多,我就越觉得自己缺少某些东西或做的事情完全错误。