多线程,在线等待!来者有分! 我现在想在主线程中创建一个辅助线程,该辅助线程的作用是定时(隔一段时间,例如每个10秒)向一个数据结构查询,然后根据查询的结果给主线程发信息,该怎么样是实现呢?同时线程间怎么通讯呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用工作线程UINT WorkThread(LPVOID lpParam){ LPYOURPARAMSTRUCT lpstruct; // 定义一个Struct,Struct中有一个主线程的主HWND lpstruct = (LPYOURPARAMSTRUCT)lpParam; Query(...); // 把你的查询结果放入一个缓存区中,这个缓存区可以由lpstruct中定义的 // 用一个临界对象同步这个缓存区。 EnterCriticalSection(); // 缓存区 LeaveCriticalSection(); // 通知主线程的窗口 SendMessage(lpstruct->hwnd, WM_YOURMSG, 0, 0);...} JJONY,谢谢你!你能否告诉我怎么样创建一个线程嘛? ::afxBeginThread(WorkThread); 最简单的方法了, 然后主线程的窗口接收WM_YOURMSG的做法:1. 先定义一个LRESULT OnYourMsg(WPARAM wParam, LPARAM lParam)处理函数2. 在窗口类的MESSAGE_MAP中加入ON_REGISTERED_MESSAGE(WM_YOURMSG, OnYourMsg)3. 在项目的一个全局地方如stdafx.h中定义const UINT WM_YOURMSG = RegisterWindowMessage("WM_YOURMSG")PostThreadMessage也一样的做法不过OnYourMsg就是在主线程里的MESSSAGE_MAP了。 UINT Thread(LPVOID lpParam){ while(1) { if (DataList.GetCount()!=0) { SendMessage();} } return 0;} UINT workThread( VOID * ){ while( true ) { // 锁定 数据结构查询 通知主线称 // SendMessage(),事件,全局变量都可以 // 解锁 Sleep(100000); // 注:最小时间间隔10ms }} 你去买本<<Win32多线程编程>>看吧.候先生译的. 其实这段代码有点问题, 但不会影响最终结果, 把SendMessage改为PostMessage或PostThreadMessage吧。这样同步操作才有效,因为SendMessage是直接调用窗口的WndProc,也就是说直接到OnYourMsg调用完毕才返回的。这样就已经实现了同步操作,没必要CriticalSection了,但这里就有一个线程间切换过程,效率就不太高了。Post*函数只把MESSAGE放上MessageQueue就返回了,效率较高。 怎样做都对,主要看你项目要求了。 LPWSTR转char*问题,请教! 内核同步问题 如何在普通的View类视图上实现动态滚动条? 请教大侠,我从USB口接受一串数字信息,在接受过程中,如果电脑运行其它程序,这串信息可能会收到干扰,暂停下来,不让接受,请问利用线程的方法 帮帮忙,求一个工具!!!!!!!!!!!!!!! COLORREF到RGB 求教:fft变换,请凡是有过此经验的高低手务必进来看一下 这种条形码是用什么编码的? 求问richedit一个问题?? 请教诸位高手,关于制作安装程序的问题 听说MSDN中有画图的源码但我没有找到,哪里能找到类似的源码. 对话筐和 ClassWizard 的问题
UINT WorkThread(LPVOID lpParam)
{
LPYOURPARAMSTRUCT lpstruct; // 定义一个Struct,Struct中有一个主线程的主HWND
lpstruct = (LPYOURPARAMSTRUCT)lpParam; Query(...);
// 把你的查询结果放入一个缓存区中,这个缓存区可以由lpstruct中定义的
// 用一个临界对象同步这个缓存区。
EnterCriticalSection();
// 缓存区
LeaveCriticalSection(); // 通知主线程的窗口
SendMessage(lpstruct->hwnd, WM_YOURMSG, 0, 0);...}
1. 先定义一个LRESULT OnYourMsg(WPARAM wParam, LPARAM lParam)处理函数
2. 在窗口类的MESSAGE_MAP中加入ON_REGISTERED_MESSAGE(WM_YOURMSG, OnYourMsg)
3. 在项目的一个全局地方如stdafx.h中定义
const UINT WM_YOURMSG = RegisterWindowMessage("WM_YOURMSG")PostThreadMessage也一样的做法不过OnYourMsg就是在主线程里的MESSSAGE_MAP了。
{
while(1)
{ if (DataList.GetCount()!=0)
{
SendMessage();}
}
return 0;
}
{
while( true )
{
// 锁定
数据结构查询
通知主线称 // SendMessage(),事件,全局变量都可以
// 解锁 Sleep(100000); // 注:最小时间间隔10ms
}
}
这样就已经实现了同步操作,没必要CriticalSection了,但这里就有一个线程间切换过程,效率就不太高了。Post*函数只把MESSAGE放上MessageQueue就返回了,效率较高。 怎样做都对,主要看你项目要求了。