在一个进程中创建一个线程之后出问题

时间:2022-05-15 17:40:46
需求:线程完成之后,线程发出结束信号到主进程中。
当前我在主进程创建了自定义消息,但是效果不佳,无法在线程中调用。求破

11 个解决方案

#1


线程中PostThreadMessage()给主线程

#2


主线程中有UI窗口没有?有的话PostMessage/SendMessage(),
没有的话可以PostThreadMessage,或者使用SetEvent()之类的通知主线程,主线程中有WaitFor类似的操作~

#3


引用 1 楼 oyljerry 的回复:

错误 4 error C2065: “WM_MYMESSAGE”: 未声明的标识符
在主进程中我有声明一个WM_MYMESSAGE自定义消息标识符,但是在线程中我没有办法调用该消息标识符

我重新建了一个类,这个类中的调用函数都是线程中使用的,创建线程是在主进程中,但是直接调用的线程函数,和需要调用的线程函数我都丢到了这个新建的类中。谢谢

#4


引用 2 楼 VisualEleven 的回复:
您说的主线程就是进程吧?如果是的话是有UI的,我新创建的只是工作线程,目的是获取一串下位机传上来的数据。但是我调用的线程函数是在新建的一个类中

#5


我现在是一个线程运行完成之后需要将这个完成消息发送给进程,然后进程接收到该线程完成就好,当然因为进程是UI线程,不能让他长时间等待,需要可以让用户操作

#6


引用 3 楼 wumin940590725 的回复:
Quote: 引用 1 楼 oyljerry 的回复:

错误 4 error C2065: “WM_MYMESSAGE”: 未声明的标识符
在主进程中我有声明一个WM_MYMESSAGE自定义消息标识符,但是在线程中我没有办法调用该消息标识符

我重新建了一个类,这个类中的调用函数都是线程中使用的,创建线程是在主进程中,但是直接调用的线程函数,和需要调用的线程函数我都丢到了这个新建的类中。谢谢

你把WM_MYMESSAGE放到一个公共文件

#7


在新建的类中,从新定义一遍 defile WM_MYMESSAGE

#8


引用 6 楼 oyljerry 的回复:

m_midiDecode.handle = GetCurrentProcessId();
PostThreadMessage(handle,WM_MYMESSAGE,0,0);我用您的方法发送WM_MYMESSAGE之后,消息函数没有被调用到,就是我发送了这个消息,但是没有触发函数

#9


我可以确定handle就是当前运行进程的PID号,然后我在线程中这样调用了PostThreadMeassage,不会报错,但是我这样写的函数ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)中的OnMyMessage函数未被调用,求解怎么处理?

#10


可以搜索线程间的通信

#11


呵呵,解决方法只要getsafehwd就好了,大神估计太简单了无视了,不过还是谢谢。

#1


线程中PostThreadMessage()给主线程

#2


主线程中有UI窗口没有?有的话PostMessage/SendMessage(),
没有的话可以PostThreadMessage,或者使用SetEvent()之类的通知主线程,主线程中有WaitFor类似的操作~

#3


引用 1 楼 oyljerry 的回复:

错误 4 error C2065: “WM_MYMESSAGE”: 未声明的标识符
在主进程中我有声明一个WM_MYMESSAGE自定义消息标识符,但是在线程中我没有办法调用该消息标识符

我重新建了一个类,这个类中的调用函数都是线程中使用的,创建线程是在主进程中,但是直接调用的线程函数,和需要调用的线程函数我都丢到了这个新建的类中。谢谢

#4


引用 2 楼 VisualEleven 的回复:
您说的主线程就是进程吧?如果是的话是有UI的,我新创建的只是工作线程,目的是获取一串下位机传上来的数据。但是我调用的线程函数是在新建的一个类中

#5


我现在是一个线程运行完成之后需要将这个完成消息发送给进程,然后进程接收到该线程完成就好,当然因为进程是UI线程,不能让他长时间等待,需要可以让用户操作

#6


引用 3 楼 wumin940590725 的回复:
Quote: 引用 1 楼 oyljerry 的回复:

错误 4 error C2065: “WM_MYMESSAGE”: 未声明的标识符
在主进程中我有声明一个WM_MYMESSAGE自定义消息标识符,但是在线程中我没有办法调用该消息标识符

我重新建了一个类,这个类中的调用函数都是线程中使用的,创建线程是在主进程中,但是直接调用的线程函数,和需要调用的线程函数我都丢到了这个新建的类中。谢谢

你把WM_MYMESSAGE放到一个公共文件

#7


在新建的类中,从新定义一遍 defile WM_MYMESSAGE

#8


引用 6 楼 oyljerry 的回复:

m_midiDecode.handle = GetCurrentProcessId();
PostThreadMessage(handle,WM_MYMESSAGE,0,0);我用您的方法发送WM_MYMESSAGE之后,消息函数没有被调用到,就是我发送了这个消息,但是没有触发函数

#9


我可以确定handle就是当前运行进程的PID号,然后我在线程中这样调用了PostThreadMeassage,不会报错,但是我这样写的函数ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)中的OnMyMessage函数未被调用,求解怎么处理?

#10


可以搜索线程间的通信

#11


呵呵,解决方法只要getsafehwd就好了,大神估计太简单了无视了,不过还是谢谢。