标签: blocking

如何从被阻止的电话中返回?

是否可以强制线程从调用返回到阻塞函数,例如从流中阻塞读取?

int x;
std::cin >> x;
Run Code Online (Sandbox Code Playgroud)

例如...

c++ multithreading blocking

1
推荐指数
1
解决办法
536
查看次数

C++线程和简单的阻塞机制?

我有一个C++程序,它运行一堆线程来操作相同的数据.这些线程中的每一个都有一个指向正在被操纵的对象的指针,例如:

thread1和thread2都有一个指向object1的指针
object1-> addSomething()可以被thread1或2使用并引用同一个对象

现在,如果两个线程在同一时刻完成这些操作可能会给它们带来一些麻烦,所以我想要一个简单的阻塞机制.我想要的只是这个:

void method()
{
  waitUntilFree()
  blockForOthers()
  doSomething()
  unblock()
}
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?我只是想阻止并等到它是免费的.我不介意线程可能需要等待一段时间.有一个简单的机制来做到这一点?我使用Boost来处理这些线程,但我不能为我的生活找到一种方法来做这个(似乎很简单的)简单的块等待事情.

c++ multithreading blocking

1
推荐指数
1
解决办法
3378
查看次数

FileOutStream.write(byte [])总是阻塞吗?

我想知道FileOutputStream.write(byte [])是否总是阻塞当前线程,导致ThreadContext开关,或者可能是如果操作系统缓冲区很大,则该操作不会阻止处理字节.

这些想法的原因是,我想知道我在我的应用程序中使用log4j进行的日志记录是否真的是性能损失,并且使用记录消息的队列是否会更快,这些消息由单独的线程读取并写入日志文件(我知道如果应用程序退出并且队列中的语句没有刷新到磁盘,吞没日志记录语句的缺点).

不,我还没有描述它,这些是相当概念性的想法.

java io concurrency blocking

1
推荐指数
1
解决办法
1493
查看次数

在Linux中,我正在寻找一种方法,让一个进程通过阻塞来发出信号

我正在寻找一个简单的事件通知系统:

  1. 进程A阻塞直到它被...通知

  2. 进程B,触发进程A.

如果我在Win32中这样做,我可能会使用事件对象('A'块,当'B'执行SetEvent时).我需要一些非常快速和脏的东西(更喜欢脚本而不是C代码).你会建议什么样的东西?我想知道文件咨询锁,但它似乎很乱.其中一个进程必须主动打开文件才能保持锁定.

linux events ipc blocking

1
推荐指数
1
解决办法
114
查看次数

Linux C++ TCP套接字 - 启用阻止模式

令人惊讶的是,我很难找到答案.

我有一个TCP客户端套接字,我可以成功连接并发送数据.但是,在发送数据之后,我期待从服务器返回响应.我检查了我的套接字,看起来它处于非阻塞模式.

if (fcntl(sc->connect_d, F_GETFL) && O_NONBLOCK)
{
//non blocking
}
Run Code Online (Sandbox Code Playgroud)

什么是启用阻止模式的宏,以便我可以更轻松地读取服务器响应?有人可以给我一个可以做到这一点的小片段吗?谢谢

c++ sockets linux blocking

1
推荐指数
1
解决办法
1336
查看次数

如何制作Process.Start阻塞调用?

我有一个调用Process.Start()运行第三方exe.我需要处理这个可执行文件的输出文件,所以我想要阻止对Process.Start()的调用.

是否可以将此呼叫更改为阻止呼叫?

Process sampleProcess= new Process();
sampleProcess.StartInfo = sampleProcessInfoObject;
sampleProcess.Start();
Run Code Online (Sandbox Code Playgroud)

c# process blocking

1
推荐指数
1
解决办法
2171
查看次数

使用SetParent将窗口嵌入外部进程的消息循环问题

我的Windows应用程序有一个标签界面.每个选项卡都会呈现一些UI内容.众所周知,如果我在主线程中进行非常耗时的for循环而不让其他人处理任何Windows消息,那么应用程序将被冻结.在冻结期间,我无法切换标签.

我受到了谷歌Chrome的多进程架构的启发.我尝试使用SetParent嵌入过程到另一个过程.更具体一点:流程A是主人.它可以创建无限的工作流程.每个工作进程都有自己的消息循环.如果进程B被冻结,则不应冻结进程A和任何其他工作进程.

其实我错了:如果我点击按钮工作进程B在主线程中不间断地执行大量UI工作,不仅会阻止进程B的UI,还会阻止进程A的UI,直到我的测试代码结束.

有人可以分享一些灯吗?

delphi user-interface multithreading sendmessage blocking

1
推荐指数
1
解决办法
940
查看次数

如何在SIGINT处理程序中清除本地数据

我需要在SIGINT处理程序中执行清理功能,但无法将本地数据传递给它。这里是一个例子:

int main(int argc, char *argv[]) {

    struct database *db = db_cursor();
    sockfd_t master_socket = init_server();

    signal(SIGINT, sigint_handler);

    while (1) {
        // accepting connections
    }
}

void sigint_handler(int s) {
    destroy_db(db);
    shutdown(master_socket, SHUT_RDWR);
    close(master_socket);
    exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

我该如何实施这种行为?我试过使此变量为全局变量,但无法在编译时调用此函数(错误:initializer元素不是编译时常量)。

c signals blocking sigint

1
推荐指数
1
解决办法
920
查看次数

如何优雅地从主线程中阻止pthread退出?

我有一个pthread,它对某些文件描述符进行无限轮询,并带有负超时参数.

从主线程,我希望能够向轮询线程指出它应该退出.

我做了一些研究,发现了以下方法:

  1. 使用pthread_cancel():这是不鼓励的,因为它可能导致意外后果,即不清除任何持有的资源或互斥量

  2. 使用变量作为标志并将其设置在主线程中.轮询线程每次迭代都会检查此标志,如果设置,则通过调用pthread_exit()退出.这种方法不起作用,因为我的轮询线程不循环,而只是无限期地阻塞,等待文件描述符.

任何人都可以建议一个优雅的解决方案吗?

谢谢!ASM

c multithreading pthreads blocking

1
推荐指数
1
解决办法
261
查看次数

C#HttpClient - PostAsync不返回(即使使用ConfigureAwait)

我在C#中使用HttpClient时疯狂...

我简化了我的项目,因此可以更轻松地复制我的问题.我想做的就是在后台调用HttpClient.PostAsync而不阻塞我的UI窗口(我正在使用WPF btw).

这是我的代码(将代码删到了min.):Bing仅用于此处不显示我的私人网络服务,它当然可以替换为其他所有网站.

    private async void Window_Loaded(object sender, RoutedEventArgs e)
    {
        try {
            MyTextBlock.Text = "Waiting...";

            Uri webUri = new Uri("https://www.bing.com/");
            using (HttpClient client = new HttpClient()) {
                using (HttpResponseMessage response = await client.PostAsync(webUri, new MultipartFormDataContent())) {
                    MyTextBlock.Text = await response.Content.ReadAsStringAsync();                       
                }
            }
        } catch (Exception exc) {
            MessageBox.Show(exc.ToString(), "Unhandled Exception");
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我的UI正在等待异步发布请求时,它在TextBox中显示"Waiting".当异步请求返回时,它会显示结果.什么都不应该发生.

所以这里出现了问题,有时候PostAsync方法根本就不会返回......甚至会忽略Timeout.当我调试它总是有效,但当我尝试启动应用程序时,它有时会挂起.并不总是哪个不能让错误更容易找到.我尝试了多种方法来调用请求异步,但每次都是同样的问题.

我也阅读了以下博客,其中包含异步方法中的阻塞问题,但即使使用ConfigureAwait也没有区别. http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

我可以想象在HttpClient async方法中存在一个问题,锁定主线程,因此它会导致这个问题.Wenn我在ConsoleApplication中使用相同的代码一切都很好.我的客户端和目的地之间有一个代理,但这应该不是问题.

有人可以复制这个问题吗?我在.NET Framework 4.6.1中使用C#/ WPF.

c# wpf httpclient blocking async-await

1
推荐指数
1
解决办法
2271
查看次数