2003-10-05 22:14:50 服务启动
2003-10-05 22:15:10 开始一个IO处理(线程): 重叠 I/O 操作在进行中。
2003-10-05 22:15:10 连接数据库:1
2003-10-05 22:15:10 某项操作
2003-10-05 22:15:50 开始一个IO处理(线程): 当文件已存在时,无法创建该文件。
-------------------------------------------
这是一个多线程的程序,当服务一启动时,程序开一个线程操作正常,并提示:重叠 I/O 操作在进行中。
当第二个线程运行时,就无法操作,请问怎么回事!如何解决,谢谢!!!SleepEx 延缓当前线程,直到其他完成
dwIndex = SleepEx(INFINITE, TRUE);
2003-10-05 22:15:10 开始一个IO处理(线程): 重叠 I/O 操作在进行中。
2003-10-05 22:15:10 连接数据库:1
2003-10-05 22:15:10 某项操作
2003-10-05 22:15:50 开始一个IO处理(线程): 当文件已存在时,无法创建该文件。
-------------------------------------------
这是一个多线程的程序,当服务一启动时,程序开一个线程操作正常,并提示:重叠 I/O 操作在进行中。
当第二个线程运行时,就无法操作,请问怎么回事!如何解决,谢谢!!!SleepEx 延缓当前线程,直到其他完成
dwIndex = SleepEx(INFINITE, TRUE);
用到了一个 COM 接口,这个接口是不是就是所谓的文件操作呢?
代码太多了,无法帖出来,太麻烦了!~~谢谢~~~
代码不是我写的,而且很多代码,看的都头疼
系统报的错误:“当文件已存在时,无法创建该文件。”这个是什么意思呢?
什么文件在使用呢?又是哪个文件在创建呢?我看代码里根本没有创建文件的意思
OVERLAPPED 是什么意思???
不行了~~~头大了~~~
系统报的错误:“当文件已存在时,无法创建该文件。”这个是什么意思呢?
什么文件在使用呢?又是哪个文件在创建呢?我看代码里根本没有创建文件的意思
OVERLAPPED 是什么意思???
不行了~~~头大了~~~
//////////////////////////////////////////////////////////////////
那就应该是你重复打开串口了,串口设备不能共享,对所有的进程以及线程有且仅能打开一次,你可能把打开串口的代码放到了线程中,这样打开多个这样的线程后只有第一个打开串口的线程运行正常,别的线程将不能真正运行(甚至有可能影响到第一个打开串口的线程).没看到你的代码,根本不可能知道你代码的问题,如果可能发到我又想看看吧,[email protected]
可是,唉,真是麻烦~~~
我再仔细看看
不过,那个代码不是操作 串口的,只用到一个关于操作 IIS 的 COM 接口
再次感谢~~~
// 监听 :: 打开一个 SOCKET 接收 UDP 消息
//************************************************************
WSADATA wsa;
sockaddr_in InternetAddr;
auto_ptr<char> pbBuf(new char[SOCKET_BUFFER_SIZE]);
ZeroMemory(pbBuf.get(), SOCKET_BUFFER_SIZE); //----------------------------------------
// 初始化 SOCKET
//----------------------------------------
if ( 0 != WSAStartup(MAKEWORD(2,2), &wsa) ) {
lstrcpy(CErrorOperation::s_tszDump, _T("SOCKET初始化失败"));
CErrorOperation::s_dwErrorCode = WSAGetLastError();
CErrorOperation::WriteErrorLog();
return 0;
} //----------------------------------------
// 配置本地监听的 SOCKET IP 和端口
//----------------------------------------
InternetAddr.sin_family = AF_INET;
InternetAddr.sin_addr.S_un.S_addr = inet_addr(g_ConfigInfo.szLocalIP);
InternetAddr.sin_port = htons(g_ConfigInfo.usLocalPort); g_sReceive = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if ( INVALID_SOCKET == g_sReceive ) {
lstrcpy(CErrorOperation::s_tszDump, _T("SOCKET()失败"));
CErrorOperation::s_dwErrorCode = WSAGetLastError();
CErrorOperation::WriteErrorLog();
return 0;
} if ( SOCKET_ERROR == bind(g_sReceive, (PSOCKADDR)&InternetAddr, sizeof(InternetAddr)) ) {
lstrcpy(CErrorOperation::s_tszDump, _T("SOCKET()绑定失败") );
CErrorOperation::s_dwErrorCode = WSAGetLastError();
CErrorOperation::WriteErrorLog();
closesocket(g_sReceive);
return 0;
} //----------------------------------------
// 设置如果缓冲区溢出,则首先抛弃最早收到的消息
//----------------------------------------
ULONG ulArg = 1;
if ( SOCKET_ERROR == ioctlsocket(g_sReceive, SIO_ENABLE_CIRCULAR_QUEUEING, &ulArg) )
{
CErrorOperation::s_dwErrorCode = WSAGetLastError();
CErrorOperation::WriteErrorLog();
closesocket(g_sReceive);
return 0;
} //----------------------------------------
// 设置重叠IO,接收数据
//----------------------------------------
WSAOVERLAPPED Overlapped;
ZeroMemory(&Overlapped, sizeof(WSAOVERLAPPED)); g_DataBuf[0].len = SOCKET_BUFFER_SIZE;
g_DataBuf[0].buf = pbBuf.get();
ZeroMemory(g_DataBuf[0].buf, g_DataBuf[0].len); int dwFromLen = sizeof(sockaddr_in);
DWORD dwRecvBytes = 0;
DWORD dwFlags = 0;
DWORD dwIndex = 0; //----------------------------------------
// WorkerRoutine()
//----------------------------------------
if ( SOCKET_ERROR == WSARecvFrom(g_sReceive, g_DataBuf, 1, &dwRecvBytes, &dwFlags,
(PSOCKADDR)&g_sockAddrDest, &dwFromLen, &Overlapped, WorkerRoutine) ) {
if ( WSAGetLastError() != WSA_IO_PENDING ) {
lstrcpy(CErrorOperation::s_tszDump, _T("WSARecvFrom()失败"));
CErrorOperation::s_dwErrorCode = WSAGetLastError();
CErrorOperation::WriteErrorLog();
closesocket(g_sReceive);
return 0;
}
} //----------------------------------------
// 开始监听
//----------------------------------------
while ( true ) {
//INFINITE 定义了一直在监听这个端口
dwIndex = SleepEx(INFINITE, TRUE);
if ( WAIT_IO_COMPLETION == dwIndex ) {
lstrcpy(CErrorOperation::s_tszDump, _T("开始一个IO处理"));
CErrorOperation::s_dwErrorCode = WSAGetLastError();
CErrorOperation::WriteErrorLog();
}else {
//IO处理失败
lstrcpy(CErrorOperation::s_tszDump, _T("IO处理失败"));
CErrorOperation::s_dwErrorCode = WSAGetLastError();
CErrorOperation::WriteErrorLog();
break;
}
}
closesocket(g_sReceive);
//清理SOCKET
WSACleanup();
---------------------------------------------------------------
代码就是这些,怎么回事啊~~~请高手帮忙~~~
谢谢~~~