创建线程函数的方法

论坛 期权论坛     
选择匿名的用户   2021-5-30 02:41   150   0
<span style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap">1.线程函数</span>
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<span style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap">  在启动一个线程之前,必须为线程编写一个全局的线程函数,这个线程函数接受一个32位的LPVOID作为参数,返回一个UINT,线程函数的结构为:</span>
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<span style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap"></span>
<table align="center" bgcolor="#e3e3e3" border="1" style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word" width="90%"><tbody style="word-wrap:break-word"><tr style="word-wrap:break-word"><td style="word-wrap:break-word; margin:0px; padding:0px">UINT ThreadFunction(LPVOID pParam)<br style="word-wrap:break-word"> {<!-- --><br style="word-wrap:break-word">  //线程处理代码<br style="word-wrap:break-word">  return0;<br style="word-wrap:break-word"> }</td></tr></tbody></table>
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<span style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap">  在线程处理代码部分通常包括一个死循环,该循环中先等待某事情的发生,再处理相关的工作:</span>
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<span style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap"></span>
<table align="center" bgcolor="#e3e3e3" border="1" style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word" width="90%"><tbody style="word-wrap:break-word"><tr style="word-wrap:break-word"><td style="word-wrap:break-word; margin:0px; padding:0px">while(1)<br style="word-wrap:break-word"> {<!-- --><br style="word-wrap:break-word">  WaitForSingleObject(…,…);//或WaitForMultipleObjects(…)<br style="word-wrap:break-word">  //Do something<br style="word-wrap:break-word"> }</td></tr></tbody></table>
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<span style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap">  一般来说,C&#43;&#43;的类成员函数不能作为线程函数。这是因为在类中定义的成员函数,编译器会给其加上this指针。请看下列程序:</span>
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<span style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap"></span>
<table align="center" bgcolor="#e3e3e3" border="1" style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word" width="90%"><tbody style="word-wrap:break-word"><tr style="word-wrap:break-word"><td style="word-wrap:break-word; margin:0px; padding:0px">#include &#34;windows.h&#34;<br style="word-wrap:break-word"> #include <br style="word-wrap:break-word"> class ExampleTask <br style="word-wrap:break-word"> { <br style="word-wrap:break-word">  public: <br style="word-wrap:break-word">   void taskmain(LPVOID param); <br style="word-wrap:break-word">   void StartTask(); <br style="word-wrap:break-word"> }; <br style="word-wrap:break-word"> void ExampleTask::taskmain(LPVOID param) <br style="word-wrap:break-word"> {} <br style="word-wrap:break-word"> <br style="word-wrap:break-word"> void ExampleTask::StartTask() <br style="word-wrap:break-word"> { <br style="word-wrap:break-word">  _beginthread(taskmain,0,NULL);<br style="word-wrap:break-word"> } <br style="word-wrap:break-word"> <br style="word-wrap:break-word"> int main(int argc, char* argv[])<br style="word-wrap:break-word"> {<!-- --><br style="word-wrap:break-word">  ExampleTask realTimeTask;<br style="word-wrap:break-word">  realTimeTask.StartTask();<br style="word-wrap:break-word">  return 0;<br style="word-wrap:break-word"> }</td></tr></tbody></table>
<br style="color:rgb(102,102,102); font-family:monospace; font-size:16px; line-height:26px; white-space:pre-wrap; word-wrap:break-word">
<span style="colo
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP