考虑以下代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int i;
for(i = 0; i < 2; i++)
{
fork();
printf(".");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序输出8个点.怎么可能呢?不应该有6个点吗?
我在boost :: asio上有一个TCP服务器,它监听连接并在获取后开始使用boost :: asio :: write在循环中发送数据块.
bool TcpServer::StartTcpServer(std::shared_ptr<boost::asio::io_service> io_service)
{
m_ioservice = io_service;
m_acceptor.reset(new boost::asio::ip::tcp::acceptor(*m_ioservice, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), m_port)));
m_socket = std::unique_ptr<boost::asio::ip::tcp::socket>(new boost::asio::ip::tcp::socket(*m_ioservice));
m_socket->close();
m_acceptor->async_accept(*m_socket, m_peer_endpoint, boost::bind(&TcpServer::AcceptHandler, this, boost::asio::placeholders::error));
m_io_thread.reset(new std::thread([this]{
try
{
this->m_ioservice->run();
}
catch(const boost::system::system_error & err){print logs}
catch(...){print another logs}
}));
}
void TcpServer::AcceptHandler(const boost::system::error_code &ec)
{
while(true)
{
try
{
boost::asio::write( *m_socket, boost::asio::buffer(data->c_str(), data->size()), boost::asio::transfer_all());
}
catch(const boost::system::system_error & err){print logs}
catch(...){print another logs}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我手动停止接收器,则会抛出并正确处理损坏管道的异常.但有时会发生破裂的管道(我认为连接不良的原因),异常奇迹般地落在所有捕获中并且应用程序终止:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
Run Code Online (Sandbox Code Playgroud)
检查核心我发现它发生在boost …
我在Django中有一个表单:
views.py:
class SearchForm(forms.Form):
type = forms.ChoiceField(choices = ...)
list1 = forms.ModelMultipleChoiceField(...)
list2 = forms.ModelMultipleChoiceField(...)
Run Code Online (Sandbox Code Playgroud)
home.htm:
<td valign='top'>{{ form.type }}</td>
<td valign='top'>{{ form.list1 }}</td>
<td valign='top'>{{ form.list2 }}</td>
<td valign='top'><input type="submit" value="Find" /></td>
Run Code Online (Sandbox Code Playgroud)
如果type为1,我希望显示list1元素并隐藏list2,反之亦然,如果type为2,我希望它们隐藏并动态显示,而无需重新加载页面或与服务器进行任何交互.
我相信Javascript在这里很有用,但我不知道.
我的 boost 服务器意外停止接受传入连接,因为我团队中的其他人在不同线程(使用不同端口)中使用 boost 接受器创建了另一个服务器?这是正常的吗?如何让两个服务器独立工作而不互相干扰?
已解决:接受器与此无关,这家伙在某个地方启动了无限循环,阻塞了其他组件。我想这就是当团队工作不协调时会发生的情况:( 对不起,伙计们,sehe 一如既往地是最好的