在一个线程内定时向服务器发送消息,而且没有窗口的情况下

younker 2004-12-22 04:10:45
在没有窗口的条件下,主程序启动一个线程,该线程定时向服务器发送消息。 同时要求如果主程序要求停止线程,这个线程可以马上退出。, 不使用MFC,请问该如何实现。
...全文
165 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
MuseIn 2004-12-23
  • 打赏
  • 举报
回复
多看看linux就知道了
beyondtkl 2004-12-23
  • 打赏
  • 举报
回复
弄一個消息循環就OK..

確實 應該不難哦。。
bluestone 2004-12-23
  • 打赏
  • 举报
回复
好注意,使用
while(1)
{
Sleep(100);
}

完成定时器的功能;

发送消息嘛~PostThreadMessage不行吗?受不到消息?使用SetWindowsHookEx跟踪WH_GETMESSAG,取得你自定义的消息就可以。
  • 打赏
  • 举报
回复
用全局标志变量的方法是比较不错的
whwjn 2004-12-22
  • 打赏
  • 举报
回复
gz
oyljerry 2004-12-22
  • 打赏
  • 举报
回复
while循环等待,注意不要阻塞了整个进程
发送消息,
控制线程退出
loucai 2004-12-22
  • 打赏
  • 举报
回复
gz
spwnihao 2004-12-22
  • 打赏
  • 举报
回复
自己控制
一个全局变量
在不发送数据的时候循环判断全局变量,然后小睡一会sleep(10)(没有的话,cpu会使用100%的)
套接字应该使用非阻塞方式
在发送数据的过程中
使用select循环发送,循环过程中同时判断全局变量

这样就可以完成你的功能
younker 2004-12-22
  • 打赏
  • 举报
回复
忘了补充一点了,线程是通过socket定时向远程服务器发送消息。
但是还不能阻塞主程序和这个线程之间的通信。
比如要求线程每5分钟向服务器发送一个消息来通知当前的系统状态。
线程在发送了消息之后,需要等待5分钟,在等待过程中,主程序要求线程停止,线程应该马上响应,正常的退出,不能使用TerminateThread强行中止。
而且在程序中没有任何的窗口可以使用。
问题是:在线程向服务器发送了消息之后,等待过程应该怎么处理才能及时地得到主程序要退出的消息。
因为没有窗口存在,所以PostThreadMessage是没有用的。

SatanLi1982 2004-12-22
  • 打赏
  • 举报
回复
用SetTimer和KillTimer
yanw0212 2004-12-22
  • 打赏
  • 举报
回复
1.在你的服务启动以后,创建一个专门接收消息的线程A,并记录线程的ID号

// 等待发送给本线程的消息, 收到不通的消息分别作不同的处理
dwResult=::MsgWaitForMultipleObjects(0,0,false,20,QS_POSTMESSAGE );
if (dwResult == WAIT_OBJECT_0)
{
if(PeekMessage(
&Msg, // address of structure with message
NULL, // retrieve messages posted to this thread
0, 0, // do not perform any message filtering
PM_REMOVE ) ) // message is removed from the queue
{
if ( Msg.message==WM_SENDCMGS )
{ .........
}
}


2.在你的主线程启动时设定一个定时器,
UINT_PTR SetTimer(
HWND hWnd, // handle to window
UINT_PTR nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // timer procedure
);


在时间函数里向线程A发送消息
VOID CALLBACK TimerProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER message
UINT_PTR idEvent, // timer identifier
DWORD dwTime // current system time
)
{
BOOL PostThreadMessage(
DWORD idThread, // thread identifier
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter


}

3向要停止线程时,
BOOL PostThreadMessage(
DWORD idThread, // thread identifier
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter



danyueer 2004-12-22
  • 打赏
  • 举报
回复
1 创建线程采用CreateThread

2 发消息采用PostThreadMessage

3 终止这个线程,可以线程内用Event实现,也可以主调用TerminateThread强行终止。
aoosang 2004-12-22
  • 打赏
  • 举报
回复
应该没有什么难题吧?
aoosang 2004-12-22
  • 打赏
  • 举报
回复
我觉得可以使用一个全局变量来控制是否退出,

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧