非主线程创建窗口也能工作正常,只要我们注意一点:消息循环必须要和创建窗口在同一线程!

#include "stdafx.h"
#include "win32.h"
#include "windows.h"
#include

#define MAX_LOADSTRING 100

HWND g_hWnd = NULL;
HINSTANCE g_hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void CreateWnd(void)
{

WNDCLASS wc = {0};
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_hInst;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_WINDOW);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("SimpleWindow");

RegisterClass(&wc);

g_hWnd = CreateWindowEx(0,
TEXT("SimpleWindow"),
TEXT("SimpleWindow"),
WS_VISIBLE,
0,
0,
200,
200,
NULL,
NULL,
g_hInst,
0);
}

DWORD ThreadBaseFunc(LPVOID lpParam)
{
CreateWnd();
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
HANDLE hThrd =(HANDLE)_beginthreadex( NULL,0,(unsigned int (__stdcall*)(void*))ThreadBaseFunc,NULL,0,NULL);
CloseHandle(hThrd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)
{
return DefWindowProc(hWnd,wMsg,wParam,lParam);
}

时间: 2024-10-04 15:41:21

非主线程创建窗口也能工作正常,只要我们注意一点:消息循环必须要和创建窗口在同一线程!的相关文章

在非主线程里面使用NSTimer创建和取消定时任务

为什么要在非主线程创建NSTimer 将 timer 添加到主线程的Runloop里面本身会增加线程负荷 如果主线程因为某些原因阻塞卡顿了,timer 定时任务触发的时间精度肯定也会受到影响 有些定时任务不是UI相关的,本来就没必要在主线程执行,给主线程增加不必要的负担.当然也可以在定时任务执行时,手动将任务指派到非主线程上,但这也是有额外开销的. NSTimer的重要特性 NSTimer上的定时任务是在创建NSTimer的线程上执行的.NSTimer的销毁和创建必须在同一个线程上操作 NSTi

多线程的非主线程的销毁机制

假设有如下代码所示的多线程: 1 private void btnNewThread_Click(object sender, EventArgs e) 2 { 3 Thread t = new Thread(new ThreadStart(Test)); 4 t.Start(); 5 this.btnNewThread.Enabled = false; 6 } 7 private void Test() 8 { 9 //-- 10 } 这个新建的线程t在执行完Test()方法后会自动销毁吗?还

Android 在非主线程无法操作UI意识

Android在应用显示Dialog是一个非常easy事儿,但我从来没有尝试过Service里面展示Dialog. 经验UI操作要在主线程,本地的服务Service是主线程里没错,可是远程service里面显示Dialog,听起来是不是就应该没有在主线程里面了呢? 尝试一下就知道了,写了个AIDL的调用,client端去调用AIDL.在Service这边就是去显示一个Dialog. AIDL的部分就忽略了.Service这边的代码就和Activity上显示dialog一样. AlertDialo

Android 关于非主线程不能操作UI的认识

Android在应用里显示Dialog是个很简单的事情,但是一直没试过在Service里面显示Dialog.根据之前的经验UI操作要在主线程,本地的服务Service是主线程里没错,但是远程service里面显示Dialog,听起来是不是就应该没有在主线程里面了呢? 尝试一下就知道了,写了个AIDL的调用,client端去调用AIDL,在Service这边就是去显示一个Dialog.AIDL的部分就忽略了.Service这边的代码就和Activity上显示dialog一样. AlertDialo

SD_WebImage-03-多线程+下载任务放入非主线程执行

1 // 2 // UIImageView+WebCache.m 3 // 02-SDWebImage 4 // 5 // Created by mac on 16/4/20. 6 // Copyright © 2016年 mac. All rights reserved. 7 // 8 9 #import "UIImageView+WebCache.h" 10 11 @implementation UIImageView (WebCache) 12 13 /** 14 * 注意点:有

Android 在工作线程(非主线程)更改UI组件

Looper.prepare();          Toast.makeText(LoginActivity.this,filedId, Toast.LENGTH_LONG).show();        Looper.loop(); 这样为什么可以?然后就是loop 是个死循环,这样子真的好吗?

QT中|Qt::Tool类型窗口自动退出消息循环问题解决(setQuitOnLastWindowClosed必须设置为false,最后一个窗口不显示的时候,程序会退出消息循环)

为application 设置setQuitOnLastWindowClosed属性,确实为true: 将其显示为false; 退出该应该程序不能调用QDialog的close消息槽,只能调用qApp->exit(); a.setQuitOnLastWindowClosed(false); https://blog.csdn.net/lanhy999/article/details/8772408 原文地址:https://www.cnblogs.com/findumars/p/9525028.

Android之——任意时刻从子线程切换到主线程的实现(插曲)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45951149 一.引入 在Android开发中常常会遇到网络请求,数据库数据准备等一些耗时的操作:而这些操作是不允许在主线程中进行的.因为这样会堵塞主线程导致程序出现未响应情况. 所以只能另起一个子线程进行这些耗时的操作,完成后再显示到界面.众所周知,界面等控件操作只能在主线程中完成:所以不可避免的需要从子线程切换到主线程. 二.方法 对于这样的情况在Android 中比较常见的

[Android] 任意时刻从子线程切换到主线程的实现

======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/41599383 ========================================================