真诚请教关于多线程的问题!!

dannicn2000 2004-04-11 09:34:12
多线程的具体使用方法,谁能告知呀?
我是初学者,请执教啊!
我遇到的问题是:在执行recv()这样的函数时,需要等待,现在我不想让他一直在那里等,而是一边等一边执行别的命令。用多线程的方法会不会很麻烦呢?
请告知一二!
...全文
37 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yindesheng 2004-04-11
  • 打赏
  • 举报
回复
可以尝试用 API函数来实现,MSDN.COM上有详细的说明

DWORD WINAPI ThreadFunc(LPVOID plParam)
{
char szMsg[80];
wsprintf(szMsg,"Parameter=%d",*(int*)plParam);
MessageBox(NULL,szMsg,"ThreadFunc",MB_OK);
PostMessage(Application->Handle,CM_COMPLETED,10,11);
return 0;
}
//------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

DWORD dwThreadId;
HWND hThread;
int dwThrdParam=1;
char szMsg[80];
hThread=CreateThread(
NULL,
0,
ThreadFunc,//要调用的函数
&dwThrdParam,
//CREATE_SUSPENDED,
0,
&dwThreadId);
if(hThread == NULL)
{
wsprintf(szMsg,"Create thread failed");
MessageBox(NULL,szMsg,"main",MB_OK);
}
else
{
CloseHandle(hThread);
}
}
//不知道为何 创建TThread线程会导致用户界面暂时停止响应,直到线程执行完毕。
叶子哟 2004-04-11
  • 打赏
  • 举报
回复
具体是什么情况,介绍一下!
叶子哟 2004-04-11
  • 打赏
  • 举报
回复
你用非阻塞型就行
ToIP 2004-04-11
  • 打赏
  • 举报
回复
非阻塞的我不会用
CloseWind 2004-04-11
  • 打赏
  • 举报
回复
使用winsock的select函数就可以了,代码在下面:

Error = WSAAsyncSelect(sock,Application->Handle,WM_MYMESSAGE, FD_READ|FD_WRITE);
if ( Error==SOCKET_ERROR )
{
ShowSockError("WSAAsyncSelect", WSAGetLastError());
FreeSock(); //这是我自定义的的函数
return false;
}
dannicn2000 2004-04-11
  • 打赏
  • 举报
回复
非阻塞有具体是怎么用的呢??

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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