我有一个阻塞函数,它执行异步MySQL查询并在获得结果时返回结果.原因是异步是这个程序在查询期间不允许锁定.
当用户按下按钮时调用该函数,因此在第一个查询完成之前可能会多次调用该函数.我以为我可以添加一个布尔值来检查查询是否正在执行,并让函数等到它完成后再继续,但它没有按预期工作.我使用的两个DoEvents()存在一些问题.如果你注释掉任何一个,它运行得很好,除了UI冻结.
如何在执行查询时使函数执行非阻塞等待,以及在获取查询本身时执行非阻塞等待?我真的更喜欢将它保留在一个线程上,因为函数本身阻塞了调用它的代码.任何帮助将不胜感激!
public Exception LastError;
public MySqlConnection Conn;
public MySqlDataReader Reader;
public bool IsExecuting = false;
public MySqlDataReader MySQL_Query(string Query, [Optional] params string[] Values)
{
while (IsExecuting)
{
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep(20);
}
if (IsConnected() == false)
ConnectToDatabase();
for (int i = 0; i < Values.Length; i++)
Values[i] = MySQL_SafeValue(Values[i]);
if (Reader != null && Reader.IsClosed == false)
Reader.Close();
IsExecuting = true;
try
{
MySqlCommand Cmd = new MySqlCommand(String.Format(Query, Values), Conn);
IAsyncResult aRes = Cmd.BeginExecuteReader();
while (!aRes.IsCompleted)
{
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep(20);
} …Run Code Online (Sandbox Code Playgroud) 嗨,有时,我想关闭我的网站进行维护...
我怎么能这样做?我在phpbb中看到了一个选项,可以通过管理员阻止该网站,然后取消阻止它们.
有没有这方面的api或告诉我如何做到这一点的方法?
我在我的网站上使用php ..
我为我的当地学校计划发射器编程,允许学生使用由教师提供的随机生成的密钥上网.这是通过将Internet Explorer中的代理更改为Internet和wb过滤器所需的代理来完成的.
随着学校网站和学习资源逐渐转移到异地托管,学生需要访问互联网密钥.除非给学生提供互联网密钥,否则学校希望能够在不打开其他互联网的情况下启用这些网站.
我通过googleing做出这样做的两种方式是阻止IE内容顾问中的所有网站执行那些被允许的密钥.或者在delphi中创建一个程序可以进行的外部代理,即指向并且只允许某些网站通过真实代理.
我合理地熟悉简单的delphi函数,并且在计算方面有一定的水平,但是没有线索从哪里开始,并且会感激任何帮助.
我目前正在使用以下代码来运行进程并从我自己的程序中打印其输出.我的问题是我想做的不仅仅是打印输出.但是,由于正在执行的进程几乎不会将输出打印到控制台,因此几乎从不执行注释行,因为readLine()方法是阻塞的.
Process p = Runtime.getRuntime().exec(executablePath);
ProcessWatcher pw = new ProcessWatcher(p);
BufferedReader output = new BufferedReader(new InputStreamReader(p.getInputStream()));
while(!pw.isFinished()) {
String line = output.readLine();
if(line != null) {
System.out.println(line);
}
// I want to do something in parallel here
}
Run Code Online (Sandbox Code Playgroud)
如果我可以给readLine()调用某种超时,或者如果我可以在自己的Thread中运行它,我的问题就会解决.后者是首选,但前者是可以接受的.我的主要目的是保持代码简单.
是否有一种很好的,简单的方法来并行化阻塞调用,或者我是否需要创建一个为此实现Runnable的新类?
我有一个在指定时间后引发事件的类(它使用System.Timers.Timer内部).在我的测试代码中,我创建了一个Stopwatch我在创建类之前启动的,并设置了事件的回调来停止它Stopwatch.然后,我阻止直到Not Stopwatch.IsRunning.简单吧?
我原来的阻止代码是
While Stopwatch.IsRunning
End While
Run Code Online (Sandbox Code Playgroud)
但我发现像这样的空循环永远不会让我的回调发射!一旦我将调试代码放入while循环中,就可以了!
Dim lastSecond As Integer = 0
While sw.IsRunning
If (Date.Now.Second > lastSecond) Then
lastSecond = Date.Now.Second
Console.WriteLine("blocking...")
End If
End While
Run Code Online (Sandbox Code Playgroud)
是什么导致了这种奇怪的行为,更重要的是,我可以在阻塞部分中放入哪些最简单的代码来启动事件?
我在用户空间中搜索C中的ringbuffer实现,所以我可以在我的库中使用它.
因为我需要一个铃声缓冲器
我搜索了一段时间,并记得我在内核模式中使用wait_event_interruptible&wake_up_interruptible做了类似的事情.
但是在用户空间中使用了什么,所以我可以搜索与该方法结合的ringbuffer?我不想重新发明轮子 - 周围有许多环形缓冲解决方案.
在此先感谢并亲切的问候!
编辑:
似乎也许pthread_cond_wait可能相当于wait_event_interruptible.
Result正如Stephen Cleary关于该主题的文章所示,访问任务的属性有可能阻止任务完成.
我想Result在已完成的任务上访问将永远不会阻止,但我找不到任何确认这一点的来源.是这样吗?
我正在尝试生成一个服务器并在不同的线程上连接到它。我知道 Rust 有阻塞 I/O,但我觉得我应该能够在不同的线程中连接服务器。我没有很多线程知识。最终游戏是通过网络连接到该服务器。这就是我用player_stream TCPStream. 该player_stream会等到有东西在它的缓冲区。一旦在那里写了一些东西,它就会响应服务器。按原样,程序不会终止。
use std::net::{TcpListener, TcpStream};
use std::io::{BufReader,BufWriter};
use std::io::Write;
use std::io::Read;
use std::thread;
fn main() {
thread::spawn(move || {
start_server();
});
let player_stream = TcpStream::connect("127.0.0.1:8000").expect("Couldn't connect");
let mut reader = BufReader::new(&player_stream);
let mut response = String::new();
reader.read_to_string(&mut response);
println!("Player received {}", response);
let mut writer = BufWriter::new(&player_stream);
writer.write_all("NAME".as_bytes());
}
fn start_server() {
let listener = TcpListener::bind("127.0.0.1:8000").unwrap();
fn handle_client(stream: TcpStream) {
println!("Client connected");
let mut writer = BufWriter::new(&stream);
writer.write_all("Red".as_bytes());
let mut reader = …Run Code Online (Sandbox Code Playgroud) select()当它传递struct timeval带有超时值的参数时,可以说它是非阻塞的吗?当该参数为 NULL 时,它是阻塞的。
我想阻止其他人使用我的Javascript文件.我知道你可以像这样在htaccess文件中阻止它们,但是你可以添加一些代码,基本上说如果这个文件没有在[domain]上运行那么就不行了吗?
blocking ×10
c# ×2
nonblocking ×2
.net ×1
asynchronous ×1
c ×1
delphi ×1
function ×1
hotlinking ×1
java ×1
javascript ×1
linux ×1
mysql ×1
php ×1
proxy ×1
readline ×1
rust ×1
sockets ×1
task ×1
tcp ×1
unit-testing ×1