【发布时间】:2017-07-09 22:29:28
【问题描述】:
当我的 Win32 应用程序启动时,LoadDB() 应该被执行,它至少需要 10 或 20 秒。在哪里执行LoadDB(),作为后台加载任务,为了防止GUI窗口无响应?
是否可以这样做,但不必创建单独的thread? (这看起来很复杂,我想避免这种情况)。
注意:如果我在主消息循环中这样做:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
LoadDB();
...
GUI 将无响应。
【问题讨论】:
-
“这看起来很复杂”——做复杂的事情很复杂。
-
产生一个线程并将你的例程放在那里。
-
@NeilButterworth 我可以如果需要,但我想说“难道没有其他方法吗?”。
-
在现代 C++ 中处理线程实际上很容易,但看起来您正在编写一个 C 程序,而您恰好使用 C++ 编译器进行编译。
-
那我可以使用这个@NeilButterworth。你会从哪里开始这个动作/线程? WM_CREATE / 其他地方?
标签: c++ user-interface winapi