扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
#include <stdio.h> #include <windows.h> void ThreadFun(void) { while(1) { printf( "this is new thread\n" ); Sleep( 1000 ); } } int main() { DWORD threadID; CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFun, NULL, 0, &threadID ); while(1) { printf( "this is main thread\n" ); Sleep( 1000 ); } } |
/////////////////////////////////////////////////////////////////////////// //函数名:SendThreadFunc //函数功能:发送报文工作线程入口函数,使用UDP协议 //////////////////////////////////////////////////////////////////////////// DWORD WINAPI SendThreadFunc( LPVOID lpvThreadParm ) //提示:对于线程函数应使用WINAPI声明,WINAPI被宏定义为__stdcall { /* 创建socket */ sendSock = socket ( AF_INET, SOCK_DGRAM, 0 ); if ( sendSock == INVALID_SOCKET ) { AfxMessageBox ( "Socket创建失败" ); closesocket ( recvSock ); } /* 获得目标节点端口与地址 */ struct sockaddr_in desAddr; desAddr.sin_family=AF_INET; desAddr.sin_port=htons( DES_RECV_PORT ); //目标节点接收端口 desAddr.sin_addr.s_addr = inet_addr( DES_IP ); /* 发送数据 */ while(1) { WaitForSingleObject( hSendEvent, 0xffffffffL );//无限等待事件发生 ResetEvent( hSendEvent ); sendto( sendSock, (char *)sendSockData.data, sendSockData.len, 0, (struct sockaddr*)&desAddr, sizeof(desAddr) ); } return -1; } |
///////////////////////////////////////////////////////////////////////////// // CMultiThreadDllApp initialization BOOL CMultiThreadDllApp::InitInstance() { if ( !AfxSocketInit() ) //初始化socket { AfxMessageBox( IDP_SOCKETS_INIT_FAILED ); return FALSE; } return TRUE; } |
//////////////////////////////////////////////////////////////////////////////// //函数名:SendInit //函数功能:DLL提供给应用程序调用接口,用于启动发送线程 ///////////////////////////////////////////////////////////////////////////// void SendInit(void) { hSendThread = CreateThread( NULL, 1000, SendThreadFunc, this, 1, &uSendThreadID ); } |
//////////////////////////////////////////////////////////////////////////////// //函数名:SendMsg //函数功能:DLL提供给应用程序调用接口,用于发送报文 ///////////////////////////////////////////////////////////////////////////// extern "C" void WINAPI SendMsg( InterDataPkt sendData ) { sendSockData = sendData; SetEvent( hSendEvent ); //释放发送事件 } |
图1 导出类时导出的symbol |
//打开名为filename共享对象,并返回操作句柄; void *dlopen (const char *filename, int flag); |
//获得接口函数地址 void *dlsym(void *handle, char *symbol); |
//关闭指定句柄的共享对象 int dlclose (void *handle); |
//共享对象操作函数执行失败时,返回出错信息 const char *dlerror(void); |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者